Cod sursa(job #196399)

Utilizator gcosminGheorghe Cosmin gcosmin Data 26 iunie 2008 11:40:49
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <stdio.h>

#define NMAX 1000010

char s[NMAX];

int nr[27];

char rez[NMAX];

int main()
{
	int i, j, k;

	freopen("ordine.in", "r", stdin);
	freopen("ordine.out", "w", stdout);

	scanf("%s", s);

	for (i = 0; s[i]; i++) nr[s[i] - 'a']++;

	for (j = 0; j < i; j++) {
		int jeg = 26;

		for (k = 0; k < 26; k++) if (nr[k] > nr[jeg]) jeg = k;

		if (nr[jeg] == i - j - nr[jeg] + 1) {
			rez[j] = jeg + 'a';
			nr[jeg]--;
			continue;
		}

		for (k = 0; k < 26; k++) {
			if (!nr[k]) continue;
			if (j && k + 'a' == rez[j - 1]) continue;
			rez[j] = k + 'a';
			nr[k]--;
			break;
		}
	}

	printf("%s\n", rez);

return 0;
}