Cod sursa(job #219839)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 8 noiembrie 2008 13:31:39
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
# include <stdio.h>
# include <string.h>
char a[36100][20],b[36100][20],asd[20],c[20],d[20],aux;
int n,i,p,q,k,m;
void sort (int i,int j)
{
if (strcmp (a[i],a[j])>0)
{
strcpy (asd,a[i]);
strcpy (a[i],a[j]);
strcpy (a[j],asd);
}
}
void interc (int i,int j,int mij)
{
q=i;
p=mij+1;
k=0;
while (q<=mij && p<=j)
{
if (strcmp (a[q],a[p])<0)
{
strcpy (b[k],a[q]);
k++;
q++;
}
else
{
strcpy (b[k],a[p]);
k++;
p++;
}
}
while (q<=mij)
{
strcpy (b[k],a[q]);
k++;
q++;
}
while (p<=j)
{
strcpy (b[k],a[p]);
k++;
p++;
}
k=0;
for (q=i;q<=j;q++)
{
strcpy (a[q],b[k]);
k++;
}
}
void divimp (int i,int j)
{
int mij;
if (j-i<=1)
sort (i,j);
else
{
mij=(i+j)/2;
divimp (i,mij);
divimp (mij+1,j);
interc (i,j,mij);
}
}


void sort2 (int i,int j,char c[20])
{
if (c[i]>c[j])
{
aux=c[i];
c[i]=c[j];
c[j]=aux;
}
}
void interc2 (int i,int j,int mij,char c[20])
{
q=i;
p=mij+1;
k=0;
while (q<=mij && p<=j)
{
if (c[q]<c[p])
{
d[k]=c[q];
k++;
q++;
}
else
{
d[k]=c[p];
k++;
p++;
}
}
while (q<=mij)
{
d[k]=c[q];
k++;
q++;
}
while (p<=j)
{
d[k]=c[p];
k++;
p++;
}
k=0;
for (q=i;q<=j;q++)
{
c[q]=d[k];
k++;
}
}
void divimp2 (int i,int j,char c[20])
{
int mij;
if (j-i<=1)
sort2 (i,j,c);
else
{
mij=(i+j)/2;
divimp2 (i,mij,c);
divimp2 (mij+1,j,c);
interc2 (i,j,mij,c);
}
}
int main ()
{
freopen ("restante.in","r",stdin);
freopen ("restante.out","w",stdout);
scanf ("%i",&n);
for (i=0;i<n;i++)
scanf ("%s",&a[i]);
for (i=0;i<n;i++)
{
m=strlen (a[i]);
divimp2 (0,m-1,a[i]);
}
divimp (0,n-1);
k=0;
for (i=1;i<n-1;i++)
if (strcmp (a[i],a[i+1])!=0 && strcmp (a[i],a[i-1])!=0)
k++;
if (strcmp(a[n-1],a[n-2])!=0)
k++;
if (strcmp(a[0],a[1])!=0)
k++;
printf ("%i",k);
return 0;
}