Cod sursa(job #132581)

Utilizator FlorianFlorian Marcu Florian Data 6 februarie 2008 10:22:14
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<stdio.h>
#include<string.h>
FILE*f=fopen("restante.in","r");
FILE*g=fopen("restante.out","w");
char a[36006][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;
    strcpy(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;
    }