Cod sursa(job #308169)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 26 aprilie 2009 11:23:20
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#include <string.h>
#define N 1000005
char v[N];
int e[27],t;
void read()
{
	/*char x;
	while (scanf("%c",&x) && (int) x>=97 && (int)x<=122)
	{
		e[(int)x-96]++;
	}*/
	fgets(v+1,N,stdin);
	int i;
	for (i=1; v[i]!='\n' && (int)v[i]>=97 && (int)v[i]<=122; i++)
		e[(int)v[i]-96]++;
	t=(int)strlen(v+1);
}
void solve()
{
	int i,j,ult_af,k,poz=0,stop=1;
	//for (i=1; i<=3; i++)
	//	printf("%d\n",e[i]);
	for (i=1; i<=26 && stop; i++)
	{
		for (k=i; k<=26; k++)
			if (e[k]==(t-poz)/2+1)
			{
				while (e[k])
				{
					printf("%c",k+96);
					poz++;
					ult_af=k;
					e[k]--;
					for (j=1; j<=26; j++)
						if (e[j] && j!=ult_af)
						{
							printf("%c",j+96);
							poz++;
							ult_af=j;
							e[j]--;
							break;
						}
				}
				stop=0;
				break;
			}
		if (e[i] && i!=ult_af && stop)
			{
				while(e[i])
				{
					printf("%c",i+96);
					poz++;
					ult_af=i;
					e[i]--;
					for (j=1; j<=26; j++)
						if (e[j] && j!=ult_af)
						{
							printf("%c",j+96);
							poz++;
							ult_af=j;
							e[j]--;
							break;
						}
				}
			}
	}
}
int main()
{
	freopen("ordine.in","r",stdin);
	freopen("ordine.out","w",stdout);
	read();
	solve();
	return 0;
}