Cod sursa(job #141625)

Utilizator alexeiIacob Radu alexei Data 23 februarie 2008 14:56:30
Problema Ordine Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#define alfa 26
int a[alfa];

int main()
{
 freopen("ordine.in","r",stdin);
 freopen("ordine.out","w",stdout);
 
 
 int n=0,aux1,max=0,i,aux2,pot,alt,prev,j;
 char a1;
 
 while( scanf("%c",&a1)!=EOF ){
       
 if( a1 !='\n' ){
aux1=int(a1)-96;
 ++a[ aux1 ];
 if( a[aux1] > max){
 max=a[aux1]; aux2=aux1;}
 ++n;}
}
 
  if( max == (n/2) +1 ){
     
      for(i=1; i<n; ++i){
     
     
       for(j=1; j<=alfa; ++j)
       if( a[j] && j!=aux2 ){
       printf("%c",char(aux2+96));
       printf("%c",char(j+96));
       --a[j];
       break;}
       }
      
       printf("%c",aux2+96); 
       printf("\n");
       }
  else{
  prev=0;
  pot=0;
      for(i=1; i<=n; ++i){
      
       pot=alfa+1;
       alt=0;
      
       for(j=1; j<=alfa; ++j){
         if( a[j] && j != prev && j <= pot )
         pot=j;
         if( a[j] && a[j] == (n-i+1)/2+1 )
         alt=j;
         }     
      
       if( alt ){
       printf("%c",char(alt+96));
       --a[alt];
       prev=alt;
       }
       else{
       printf("%c",char(pot+96));
       --a[pot];
       prev=pot;
       }
}
        printf("\n");  
     
}
   
    return 0;
}