Cod sursa(job #110034)
#include <stdio.h>
#include <math.h>
#include <string.h>
long i, u, sum, max, poz, v[32], aux;
char s[1000010], z;
int main() {
freopen("ordine.in", "r", stdin);
freopen("ordine.out", "w", stdout);
scanf("%s", s);
u = strlen(s);
z = '@';
for (i = 0;i < u; ++i) {
++v[(long)(s[i]) - 96];
++sum;
}
while (sum > 0) {
--sum;
max = 0;
for (i = 1;i <= 26; ++i) {
if (max < v[i]) {
max = v[i];
poz = i;
}
}
if (max * 2 > sum + 1) {
--v[poz];
z = (char)(poz + 96);
printf("%c", z);
} else {
aux = 97;
while (z == (char)(aux) || v[aux - 96] == 0) {
++aux;
}
z = (char)(aux);
--v[aux - 96];
printf("%c", z);
}
}
return 0;
}