Cod sursa(job #110272)

Utilizator wefgefAndrei Grigorean wefgef Data 26 noiembrie 2007 00:23:47
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme 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');
}