Cod sursa(job #613628)

Utilizator SteveStefan Eniceicu Steve Data 1 octombrie 2011 20:16:33
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream.h>
#include <string.h>

int v[30], i, j = 0, n, last, broken = 0;
char sir[1000100];

void Citire ()
{
	ifstream fin ("ordine.in");
	fin >> sir;
	fin.close ();
}

void Indexare ()
{
	n = strlen (sir);
	memset (v, 0, sizeof (v));
	for (i = 0; i < n; i++)
	{
		v[(int) (sir[i] - 97)] += 1;
	}
}

void Grunts_Work ()
{
	ofstream fout ("ordine.out");
	for (i = 0; i < 26; i++)
	{
		if ((v[i] << 1) - 1 >= n)
		{
			fout << (char) (i + 97);
			v[i]--;
			last = i;
			broken = 1;
			break;
		}
	}
	if (!broken)
	{
		for (i = 0; i < 26; i++)
		{
			if (v[i] > 0)
			{
				fout << (char) (i + 97);
				v[i]--;
				last = i;
				break;
			}
		}
	}
	n--;
	while (n)
	{
		broken = 0;
		for (i = 0; i < 26; i++)
		{
			if ((v[i] << 1) - 1 >= n)
			{
				fout << (char) (i + 97);
				v[i]--;
				last = i;
				broken = 1;
				break;
			}
		}
		if (!broken)
		{
			for (i = 0; i < 26; i++)
			{
				if (last != i && v[i] > 0)
				{
					fout << (char) (i + 97);
					v[i]--;
					last = i;
					break;
				}
			}
		}
		n--;
	}
	fout.close ();
}

int main ()
{
	Citire ();
	Indexare ();
	Grunts_Work ();
	return 0;
}