Pagini recente » Cod sursa (job #348248) | Cod sursa (job #1182239) | Cod sursa (job #42934) | Cod sursa (job #110363) | Cod sursa (job #110026)
Cod sursa(job #110026)
#include <stdio.h>
#include <string.h>
#define MAX_N 1000005
#define FIN "ordine.in"
#define FOUT "ordine.out"
int N, cnt[26];
char S[MAX_N];
int main(void)
{
int i, n, pos, num, prev;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
fgets(S, sizeof(S), stdin);
N = strlen(S);
if (S[N-1] == '\n') --N;
for (i = 0; i < N; ++i)
++cnt[S[i]-'a'];
for (prev = -1, n = N; n; --n)
{
for (i = 0; i < 26; ++i)
if (cnt[i] && i != prev) break;
if (i == 26) break;
--cnt[prev = i];
}
pos = prev;
memset(cnt, 0, sizeof(cnt));
for (i = 0; i < N; ++i)
++cnt[S[i]-'a'];
num = cnt[pos];
for (prev = -1; N; --N)
{
for (i = 0; i < 26; ++i)
if (cnt[i] && i != prev) break;
if (((num && pos < i) || (N == 2*num-1)) && pos != prev)
i = pos, --num;
printf("%c", i+'a');
--cnt[prev = i];
}
printf("\n");
return 0;
}