Cod sursa(job #112118)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 3 decembrie 2007 10:48:21
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<stdio.h>
#include<string.h>
char cit[1000010],a[30],*c,lt;
long int i,j,fr[30],l,frmax,frt,pmax;
int main()
{
	FILE *f,*g;f=fopen("ordine.in","r");g=fopen("ordine.out","w");
	c=&cit[0];
	fscanf(f,"%s",c);
	l=strlen(c);
	for(i=0;i<27;i++)a[i]=(char)i+'a';
	for(i=0;i<l;i++)
	 fr[(long int)(c[i]-'a')]++;
	for(i=0;i<27;i++)
	 if(fr[i]) { fr[j]=fr[i];a[j]=a[i];j++;}
	for(i=j;i<=27;i++) {a[i]=0;fr[i]=0;}
	do{
		frmax=0;frt=0;pmax=-1;
		for(i=0;i<=27;i++)
		{ frt+=fr[i];
		  if(fr[i]>frmax){ frmax=fr[i];pmax=i;}
		}
		frt-=frmax;
		if(frmax>frt)
		{ fprintf(g,"%c",a[pmax]);lt=a[pmax];fr[pmax]--;}
		else
		 for(i=0;i<=27;i++)
		  if(fr[i]&&(a[i]!=lt))
		  { fprintf(g,"%c",a[i]);lt=a[i];fr[i]--;break;}
		l--;
	}
	while(l);
	fprintf(g,"\n");
	fcloseall();
	return 0;
}