Pagini recente » Cod sursa (job #3266992) | Cod sursa (job #2767612) | Cod sursa (job #106439) | Cod sursa (job #27591) | Cod sursa (job #107995)
Cod sursa(job #107995)
Utilizator |
Mircea Pasoi domino |
Data |
20 noiembrie 2007 23:46:51 |
Problema |
Ordine |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.88 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)-1;
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;
}