Cod sursa(job #125689)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 20 ianuarie 2008 16:19:45
Problema Restante Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<string.h>
char a[30000][17],aa[17];
long n,i;
void merge(long st,long dr,long lin)
{long m,i,j,k,l;
 if(st<dr)
   {m=(st+dr)/2;
	merge(st,m,lin);
	merge(m+1,dr,lin);
	i=st;
	j=m+1;
	l=-1;
	while(i<=m&&j<=dr)
		 {if(a[lin][i]>a[lin][j]) {aa[++l]=a[lin][j]; ++j;}
				     else {aa[++l]=a[lin][i]; ++i;}
		 }

	for(k=i;k<=m;++k) aa[++l]=a[lin][k];
	for(k=j;k<=dr;++k) aa[++l]=a[lin][k];
	for(k=st;k<=dr;++k) a[lin][k]=aa[k-st];


   }
}
void merge1(int st,int dr)
{long m,i,j,k,l;
 char aa[30000][17];
 if(st<dr)
   {m=(st+dr)/2;
	merge1(st,m);
	merge1(m+1,dr);
	i=st;
	j=m+1;
	l=0;
	while(i<=m&&j<=dr)
		 {if(strcmp(a[i],a[j])>1) {strcpy(aa[++l],a[j]); ++j;}
				     else {strcpy(aa[++l],a[i]); ++i;}
		 }

	for(k=i;k<=m;++k) strcpy(aa[++l],a[k]);
	for(k=j;k<=dr;++k) strcpy(aa[++l],a[k]);
	for(k=st;k<=dr;++k) strcpy(a[k],aa[k-st+1]);


   }
}

int main()
{long i,l;
 freopen("restante.in","r",stdin);
 freopen("restante.out","w",stdout);
 scanf("%ld\n",&n);
 for(i=1;i<=n;++i)
    {
     gets(a[i]);
     merge(0,strlen(a[i])-1,i);

    }
 merge1(1,n);
 l=n;
 for(i=1;i<=n;++i)
    if((strcmp(a[i],a[i+1])==0)||(strcmp(a[i],a[i-1])==0))
      --l;
 printf("%ld",l);
 fcloseall();
 return 0;
}