Cod sursa(job #583688)

Utilizator radubbRadu B radubb Data 21 aprilie 2011 19:58:34
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <cstdio>
#include <string>
using namespace std;

#define nmax 1000001
long n;
char s[nmax];
long q[26]; // quantity

void citire()
{
	freopen("ordine.in","r",stdin);
	scanf("%s", &s); n = strlen(s);
}

void init()
{
	for(long i=0; i<n; i++)
		q[int(s[i])-'a']++;
}

void solve()
{
	int ant=-1; bool ok;
	while(n)
	{
		ok = true;
		for(long i=0; i<26; i++)
			if(q[i] > (n-q[i]))
			{
				printf("%c", i+'a');
				q[i]--; n--; ant=i; ok = false;
				break;
			}
		if(ok)
			for(long i=0; i<26; i++)
				if(q[i] && i!=ant)
				{
					printf("%c", i+'a');
					q[i]--; n--; ant=i; break;
				}
	}
}

int main()
{
	freopen("ordine.out","w",stdout);
	citire();
	init();
	solve();
	return 0;
}