Pagini recente » Cod sursa (job #1799294) | Cod sursa (job #235700) | Cod sursa (job #2671251) | Arhiva de probleme | Cod sursa (job #290417)
Cod sursa(job #290417)
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define maxN 1000100
int C[maxN], N, A[27];
char s[maxN];
int main () {
int i, j, maxim, pozmaxim, ok;
freopen("ordine.in", "r", stdin);
freopen("ordine.out", "w", stdout);
gets(s); N = strlen(s);
for (i = 0; i < N; ++ i)
++ A[s[i] - 'a'];
C[0] = 26;
for (i = 1; i <= N; ++ i) {
ok = true;
for (j = 0; j < 26 && ok; ++ j)
if (A[j] > (N - i + 1) / 2) {
printf("%c", j + 'a');
A[j] --;
C[i] = j;
ok = false;
}
if (! ok) continue;
ok = true; maxim = 0; pozmaxim = 26;
for (j = 0; j < 26 && ok; ++ j)
if (C[i - 1] != j && A[j] > maxim) {
maxim = A[j];
pozmaxim = j;
ok = false;
}
assert(!!maxim && pozmaxim != 26);
printf("%c", pozmaxim + 'a');
A[pozmaxim] --;
C[i] = pozmaxim;
}
}