Cod sursa(job #132574)

Utilizator FlorianFlorian Marcu Florian Data 6 februarie 2008 10:15:34
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<stdio.h>
#include<string.h>
FILE*f=fopen("restante.in","r");
FILE*g=fopen("restante.out","w");
char a[35065][19];
long n;
int Divide(int p, int q) //liniile
  {
  int st=p,dr=q;
  char x[1000];
  strcpy(x,a[p]);
  while(st<dr)
    {
    while(st<dr && strcmp(a[dr],x)>=0) --dr;
    strcmp(a[st],a[dr]);
    while(st<dr && strcmp(a[st],x)<=0) ++st;
    strcpy(a[dr],a[st]);
    }
 strcpy(a[st],x);
 return st;
 }
void QSort(int p, int q)
  {
  int m=Divide(p,q);
  if(m-1>p) QSort(p,m-1);
  if(m+1<q) QSort(m+1,q);
  }


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]--;
         }
       }
    }
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]);
         sorteaza_linia(i);
         }
    }
int main()
    {
     read();
     QSort(1,n);
     long sol;
     sol=platouri();
     fprintf(g,"%ld\n",sol);
     return 0;
    }