Cod sursa(job #308185)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 26 aprilie 2009 12:16:07
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.04 kb
#include <stdio.h>
#include <string.h>
#define N 1000005
char v[N];
int e[27],t;
void read()
{
	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<=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] && stop)
				{
					printf("%c",i+96);
					poz++;
					ult_af=i;
					e[i]--;
					for (k=i; k<=26; k++)
						if (e[k]==(t-poz)/2+1)
						{
							//printf("Incepe:\nlitera_dominanta:%c\n",k+96);
							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;
						}
					for (j=1; j<=26; j++)
						if (e[j] && j!=ult_af)
						{
							printf("%c",j+96);
							poz++;
							ult_af=j;
							e[j]--;
							break;
						}
					for (k=i; k<=26; k++)
						if (e[k]==(t-poz)/2+1)
						{
							//printf("Incepe:\nlitera_dominanta:%c\n",k+96);
							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;
						}
				}
			}
	}
}
int main()
{
	freopen("ordine.in","r",stdin);
	freopen("ordine.out","w",stdout);
	read();
	solve();
	return 0;
}