Pagini recente » Cod sursa (job #2398221) | Cod sursa (job #2118684) | Borderou de evaluare (job #661974) | Cod sursa (job #3338360) | Cod sursa (job #611458)
Cod sursa(job #611458)
#include<stdio.h>
#include<string.h>
#define N 36001
long n,i,v[N],j,k,l,x[28],o[N];
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;i<n;i++)
if(!strcmp(s[i],s[i-1]))
o[i]=o[i-1]=1;
for(i=l=0;i<n;i++)
if(!o[i])
l++;
printf("%ld",l);
return 0;}