Pagini recente » Cod sursa (job #2047629) | Cod sursa (job #1573140) | Cod sursa (job #2150736) | Cod sursa (job #3192647) | Cod sursa (job #106726)
Cod sursa(job #106726)
Utilizator |
Andrei Grigorean wefgef |
Data |
18 noiembrie 2007 22:02:02 |
Problema |
Ordine |
Scor |
Ascuns |
Compilator |
cpp |
Status |
done |
Runda |
|
Marime |
0.71 kb |
#include <cstdio>
#include <cstring>
const int Nmax = 1000005;
int N;
char s[Nmax];
int v[26];
char ret[Nmax];
int main() {
freopen("ordine.in", "r", stdin);
freopen("ordine.out", "w", stdout);
scanf("%s", s);
N = strlen(s);
for (int i = 0; i < N; ++i)
++v[s[i]-'a'];
for (int i = 1; i <= N; ++i) {
int best = 0, poz = -1;
for (int j = 0; j < 26; ++j)
if (v[j] > best) {
best = v[j];
poz = j;
}
if (best > (N-i+1)/2) {
ret[i] = poz;
--v[poz];
}
else
for (int j = 0; j < 26; ++j)
if (v[j] && ((i == 1) || (j != ret[i-1]))) {
ret[i] = j;
--v[j];
break;
}
}
for (int i = 1; i <= N; ++i)
printf("%c", ret[i]+'a');
}