Cod sursa(job #328233)

Utilizator radu_cppRadu Voroneanu radu_cpp Data 1 iulie 2009 13:07:37
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<stdio.h>
#define MAX ('z'+1)

int a[MAX];
char ant,c,d;
int i,n;

int main()
{
	freopen("ordine.in","r",stdin);
	freopen("ordine.out","w",stdout);
	scanf("%c",&c); n=0;
	while (c!='\n')
	{
		a[c]++;
		n++;
		scanf("%c",&c);
	}
	for (c='a'; c<='z'; c++){
		if (a[c]==n/2+1)
			break;
	}
	if (c==MAX)
	{
		ant='!';
		for (i=1; i<=n; i++)
		{
			for (c='a'; c<MAX; c++)
				if (a[c]>=(n-i+1)/2+1)
					break;
			if (c==MAX)
				for (c='a'; c<='z'; c++)
					if (a[c] && ant!=c)
						break;
			--a[c];
			ant=c;
			printf("%c",c);
		}
	}
	else
	{
		printf("%c",c);
		for (d='a'; d<c; d++)
			for (i=1; i<=a[d]; i++)
				printf("%c%c",d,c);
		for (d=c+1; d<='z'; d++)
			for (i=1; i<=a[d]; i++)
				printf("%c%c",d,c);
	}
	printf("\n");
	fclose(stdin); fclose(stdout);
	return 0;
}