Cod sursa(job #127553)

Utilizator savimSerban Andrei Stan savim Data 24 ianuarie 2008 12:13:13
Problema Restante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#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;    
}