Cod sursa(job #308204)

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