Pagini recente » Monitorul de evaluare | Cod sursa (job #2199744) | Istoria paginii grigore-moisil-2017/clasament/9 | Cod sursa (job #201124) | Cod sursa (job #127553)
Cod sursa(job #127553)
#include <stdio.h>
#include <string.h>
int i,j,k,h,n,p,q;
char a[36001][17],b[36001][17];
char o;
short int g[36001];
void inter(int p, int q)
{
int r=(p+q)/2,x,y,k=0;
x=p;y=r+1;
while (x<=r && y<=q)
{
h=strcmp(a[x],a[y]);
if (h)
{
k++;
strcpy(b[k],a[x]);
x++;
}
else
{
k++;
strcpy(b[k],a[y]);
y++;
}
}
while (x<=r)
{
k++;
strcpy(b[k],a[x]);
x++;
}
while (y<=q)
{
k++;
strcpy(b[k],a[y]);
y++;
}
k=0;
for (i=p; i<=q; i++)
{
k++;
strcpy(a[i],b[k]);
}
}
void merge(int p, int q)
{
int r=(p+q)/2;
if (p==q) return;
merge(p,r);
merge(r+1,q);
inter(p,q);
if (p+1>=q) return;
}
int main()
{
freopen("restante.in","r",stdin);
freopen("restante.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
{
scanf("%s",a[i]);
k=strlen(a[i]);
for (p=0; p<=k-2; p++)
for (q=p+1; q<=k-1; q++)
if (a[i][p]>a[i][q])
{
o=a[i][p];
a[i][p]=a[i][q];
a[i][q]=o;
}
}
merge(1,n);
for (i=1; i<=n-1; i++)
if (strcmp(a[i],a[i+1])==0)
{
g[i]=1;
g[i+1]=1;
}
int orig=n;
for (i=1; i<=n; i++)
orig-=g[i];
printf("%d\n",orig);
return 0;
}