Cod sursa(job #190246)

Utilizator alex23alexandru andronache alex23 Data 21 mai 2008 10:28:05
Problema Ordine Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.7 kb
#include <stdio.h>
#include <ctype.h>


struct aa{
int nr;
char ch;
};

aa sol[30];
int a[30],i,n,m,j,max,pozitie;
char c,anterior;


int main()
 {FILE *f;

  f=fopen("ordine.in","r");
  fscanf(f,"%c",&c);
  m=0;
  while (!feof(f))
    {a[c-97]++;
     m++;
     fscanf(f,"%c",&c);
     }
  fclose(f);

  n=0;
  for (i=0;i<26;i++)
     if (a[i]!=0) {n++;sol[n].nr=a[i];sol[n].ch=i+97;}

  f=fopen("ordine.out","w");
  
  anterior=' ';
  for (i=1;i<=m;i++)
     {max=sol[1].nr;pozitie=1;
      for (j=2;j<=n;j++)
          if (max<sol[j].nr) {max=sol[j].nr;pozitie=j;}
      if(max>m-max-i+1) {anterior=sol[pozitie].ch;
                       fprintf(f,"%c",sol[pozitie].ch);
                       sol[pozitie].nr--;
                       if (sol[pozitie].nr==0) {for (j=pozitie;j<n;j++)
                                                      {sol[j].nr=sol[j+1].nr;
                                                       sol[j].ch=sol[j+1].ch;
                                                       }
                                                n--;
                                                }
                       }
                 else if (anterior!=sol[1].ch) {anterior=sol[1].ch;
                                                  fprintf(f,"%c",sol[1].ch);
                                                  sol[1].nr--;
                                                  if (sol[1].nr==0) {for (j=1;j<=n-1;j++)
                                                                       {sol[j].nr=sol[j+1].nr;
                                                                        sol[j].ch=sol[j+1].ch;
                                                                        }
                                                                     n--;
                                                                     }

                                                  }
                                            else {anterior=sol[2].ch;
                                                  fprintf(f,"%c",sol[2].ch);
                                                  sol[2].nr--;
                                                  if (sol[2].nr==0) {for (j=2;j<=n-1;j++)
                                                                       {sol[j].nr=sol[j+1].nr;
                                                                        sol[j].ch=sol[j+1].ch;
                                                                        }
                                                                     n--;
                                                                     }
                                                  }
      }


  fclose(f);

  return 0;
  }