Cod sursa(job #111953)

Utilizator cos_minBondane Cosmin cos_min Data 2 decembrie 2007 17:18:28
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "ordine.in"
#define out "ordine.out"
#define dim 1000002

int size=0;
int R[dim], L[dim], H[33];
char ch;

int main()
{
	freopen(in,"r",stdin);
	freopen(out,"w",stdout);
	
	memset(H,0,sizeof(H));
	
	while ( scanf("%c", &ch ) != EOF )
	{
		if ( ch >= 'a' && ch <= 'z' )
		{
			int t = (int)ch-96;
						
			H[t]++;
			L[t]++;
			size++;
		}
	}
	
	R[0] = 0;
	
	for ( int i = 1; i <= size; i++ )
	{
		int sol=-1;
		
		for ( int j = 1; j <= 26; j++ )
			if ( size-i == (H[j]-1)*2 && R[i-1] != j ) 
			{
				sol = j;
				break;
			}
		
		//printf("%d ", sol);
		
		if ( sol != -1 )
		{
			R[i] = sol, H[sol] -= 1;
		}
		else
		{
			for ( int j = 1; j <= 26; j++ )
				if ( H[j] >= 1 && R[i-1] != j )
				{
					R[i] = j, H[j] -= 1;
					break;
				}
		}
		
		//printf("%d\n", R[i]);
	 }
	
	
	for ( int i = 1; i <= size; i++ )
		printf("%c", 'a'+R[i]-1);
	
}