Cod sursa(job #125245)

Utilizator FlorianFlorian Marcu Florian Data 20 ianuarie 2008 12:17:07
Problema Restante Scor 50
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasele 5-8 Marime 1.47 kb
#include<stdio.h>
#include<string.h>
FILE*f=fopen("restante.in","r");
FILE*g=fopen("restante.out","w");
char a[36065][19];
long n;
void bubble()
   {
    long i,j;
    char aux[19];
    for(i=1;i<n;++i)
       {
        j=i;
        while(j>0 && strcmp(a[j],a[j+1])>0)
          {
           strcpy(aux,a[j]);
           strcpy(a[j],a[j+1]);
           strcpy(a[j+1],aux);
           --j;
          }
       }
    }
void sorteaza_linia(int p) //sortez elementele de pe linia p
   {
    long i,j,frecv[28];
    for(i=0;i<=26;++i) frecv[i]=0;
    long n, nr=0;
    n=strlen(a[p]);
    for(i=0;i<n;++i) frecv[a[p][i]-97]++;
    for(i=0;i<26;++i)
       {
        while(frecv[i])
          {
           a[p][nr++]=char(i+97);
           frecv[i]--;
         }
       }
    }
void sorteaza() //sortez elementele de pe fiecare linie
    {
     long i,j;
     for(i=1;i<=n;++i)
        sorteaza_linia(i);
    }
long platouri() //returnez numarul de platouri
    {
     long sol=0;
     long i,j;
     for(i=1;i<n;++i)
        if(strcmp(a[i],a[i+1])!=0) sol++;
        else
          while(strcmp(a[i],a[i+1])==0) ++i;
     if(strcmp(a[n],a[n-1])!=0) sol++;
    return sol;
    }


void read()
    {
     fscanf(f,"%ld\n",&n);
     for(long i=1;i<=n;++i)
        fscanf(f,"%s\n",a[i]);
    }
int main()
    {
     read();
     sorteaza();
     bubble();
     int sol;
     sol=platouri();
     fprintf(g,"%ld\n",sol);
     return 0;
    }