Cod sursa(job #611457)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 1 septembrie 2011 17:13:22
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
#include<string.h>
#define N 36001
long n,i,v[N],j,k,l,x[28];
char s[N][16],r[N][16];

void merge(char s[N][16],int p,int q)
{int i,j,k,m=(p+q)/2;
if(p==q)
      return;
merge(s,p,m);
merge(s,m+1,q);
for(i=k=p,j=m+1;i<=m||j<=q;)
if(j>q||(i<=m&&strcmp(s[i],s[j])<0))
      strcpy(r[k++],s[i++]);
else
      strcpy(r[k++],s[j++]);
for(i=p;i<=q;i++)
      strcpy(s[i],r[i]);}

int main()
{freopen("restante.in","r",stdin);
freopen("restante.out","w",stdout);
scanf("%ld",&n);
for(i=0;i<n;i++)
      {scanf("%s",s[i]);
      v[i]=strlen(s[i]);
      for(j=0;j<28;j++)
             x[j]=0;
      for(j=0;j<v[i];j++)
             x[s[i][j]-'a']++;
      for(j=l=0;j<28&&l<16;j++)
      for(k=0;k<x[j];k++)
             s[i][l++]=j+'a';}
merge(s,0,n-1);
for(i=1,l=0;i<n;i++)
if(strcmp(s[i],s[i-1]))
      l++;
printf("%ld",l);
return 0;}