Pagini recente » Cod sursa (job #1143383) | Cod sursa (job #1145566) | Cod sursa (job #152196) | Cod sursa (job #503085) | Cod sursa (job #128211)
Cod sursa(job #128211)
//#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f1("ordine.in");
ofstream f2("ordine.out");
long k = 0, i, j, min = 0, aux;
char c, vecbun[1000001] = {};
unsigned long s[29] = {};
c = f1.get();
while (c != '\n') {
++s[c - 97];
c = f1.get();
}
for (j = 0; j < 26; ) {
if (s[j]) {
vecbun[k] = j + 97;
--s[j];
k += 2;
}
else {
++j;
for (i = min; ; ++i)
if ( !vecbun[i] ) {
min = i;
k = i;
break;
}
}
}
k = 0;
for (i = min + 1; ; i += 2)
if (vecbun[i]) ++k;
else {
c = vecbun[i - 2];
break;
}
j = 0;
if (k) {
for (i = min - 1; i >= 0; i -= 2)
if (vecbun[i] != c) {
j = i + 1;
break;
}
if (j == 0) f2 << c << vecbun << endl;
else {
for (i = 0; i <= j - k; ++i) f2 << vecbun[i];
//sort j-k+1 -> j
aux = j - k + 1;
for (i = aux; i <= j; ++i) ++s[vecbun[i] - 97];
for (i = 0; i < 26; )
if (s[i]) {
f2 << c << (char)(i + 97);
--s[i];
}
else ++i;
//for (; i <= j; ++i)
// f2 << c << vecbun[++j];
for (i = j + 1; i < min; ++i)
f2 << vecbun[i];
f2 << endl;
}
}
else f2 << vecbun << endl;
f1.close();
f2.close();
//cout << vecbun << endl;
return 0;
}