Cod sursa(job #112067)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 3 decembrie 2007 00:32:33
Problema Ordine Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#include<string.h>
char cit[1010],a[30],*c,lt;
long int i,j,fr[30],l,r;
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<26;i++)a[i]=(char)i+'a';
	for(i=0;i<l;i++)
	 fr[(long int)(c[i]-'a')]++;
	for(i=0;i<26;i++)
	 if(fr[i]) { fr[j]=fr[i];a[i]=a[j];j++;}
	a[j]=0;j--;
	r=l-fr[j];
	while(r-fr[j]>=1)
	{ if(lt==a[0])
	   { fprintf(g,"%c",a[1]);lt=a[1];fr[1]--;r--;
	     if(!fr[1])
	      { for(i=1;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
		j--;
	      }
	   }
	   else
	   { fprintf(g,"%c",a[0]);lt=a[0];fr[0]--;r--;
	     if(!fr[0])
	      { for(i=0;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
		j--;
	      }
	   }
	}
	r+=fr[j];
	while(r)
	{ if(r%2)
	   { fprintf(g,"%c",a[j]);lt=a[j];fr[j]--;r--;
	   }
	   else
	   { fprintf(g,"%c",a[0]);lt=a[0];fr[0]--;r--;
	     if(!fr[0])
	      { for(i=0;i<=j;i++){a[i]=a[i+1];fr[i]=fr[i+1];}
		j--;
	      }
	   }
	}
	fprintf(g,"\n");
	fcloseall();
	return 0;
}