Cod sursa(job #111492)

Utilizator victorsbVictor Rusu victorsb Data 30 noiembrie 2007 01:51:37
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <cstdio>

#define Nmax 1000015

int n;
char sir[Nmax];
int ct[32];

void citire()
{
	char *i;

	fgets(sir + 1, Nmax, stdin);
	for (i = sir + 1; 'a' <= *i && *i <= 'z'; ++i)
		++ct[*i - 'a' + 1];
}

void solve()
{
	int i, sum = 0, ok, ind = 0, last = 0;

	for (i = 1; i <= 27; ++i)
		sum += ct[i];

	while (sum > 0)
	{
		ok = 1;
		for (i = 1; i <= 27; ++i)
			if (ct[i] > sum - ct[i])
			{
				sir[++ind] = i - 1 + 'a';
				ok = 0;
				--ct[i];
				--sum;
				last = i;
				break;
			}
		if (ok)
		{
			for (i = 1; i <= 27; ++i)
				if (ct[i] && last != i)
				{
					sir[++ind] = i - 1 + 'a';
					--ct[i];
					--sum;
					last = i;
					break;
				}
		}
	}

	printf("%s\n", sir + 1);
}

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

	citire();
	solve();

	return 0;
}