Pagini recente » Cod sursa (job #3254243) | Cod sursa (job #3207786) | Cod sursa (job #468393) | Cod sursa (job #1231600) | Cod sursa (job #108000)
Cod sursa(job #108000)
Utilizator |
Mircea Pasoi domino |
Data |
21 noiembrie 2007 00:15:59 |
Problema |
Ordine |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.9 kb |
#include <stdio.h>
#include <string.h>
#define MAX_N 1000005
#define FIN "ordine.in"
#define FOUT "ordine.out"
int N, cnt[26], ns;
char S[MAX_N], sol[MAX_N], pos[MAX_N];
int main(void)
{
int i, 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)
{
for (i = 0; i < 26; ++i)
if (cnt[i] && i != prev) break;
if (i == 26) break;
sol[ns++] = i+'a';
--cnt[prev = i];
}
for (i = ns-2; N && i >= 0; --i)
if (sol[i] != prev+'a' && sol[i+1] != prev+'a')
pos[i] = 1, --N;
for (i = 0; i < ns; ++i)
{
printf("%c", sol[i]);
if (pos[i]) printf("%c", prev+'a');
}
printf("\n");
return 0;
}