Cod sursa(job #133149)

Utilizator eugen.nodeaEugen Nodea eugen.nodea Data 7 februarie 2008 18:39:57
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
# include <stdio.h>

FILE *f=fopen("ordine.in","r");
FILE *g=fopen("ordine.out","w");

int Ap[133];   
char uc,c,ch;   
  
int k=0,x=0,ok=0;   
  
int main()   
{   
  
  for (c='a';c<='z';c++)   
    Ap[c]=0;   
  fscanf(f,"%c",&c);
  do {
   Ap[c]=Ap[c]+1;
   k++;
   fscanf(f,"%c",&c);;
  }while (!feof(f));
  fclose(f);
  ch='a';   
  while (!Ap[ch])   
   ch++;   
  x=0;   
  while (x<k){   
   if (Ap[ch])   
   {   
    x++;   
    ok=0;   
    for (c=ch;c<='z';c++)   
      if (Ap[c]>=(k-x+1)/2+1) {   
                ok=1;   
                break;   
                  }   
    if (ok) {   
      fprintf(g,"%c",c);
      Ap[c]--;
      uc=c;
    }
    else {
       if (uc!=ch) {
	fprintf(g,"%c",ch);
	Ap[ch]--;
        uc=ch;   
        }   
        else {   
             ok=0;   
             for (c=ch+1;c<='z';c++)   
              if (Ap[c]!=0) {   
                    ok=1;   
                    break;   
                      }   
             if (ok)   
             {   
	      fprintf(g,"%c",c);
              uc=c;   
              Ap[c]--;   
             }   
        }   
    }
    } else ch++;   
    }   
  fclose(g);
  return 0;   
}