Pagini recente » Istoria paginii runda/dopaj/clasament | Diferente pentru olimpici intre reviziile 72 si 180 | Istoria paginii runda/amenda/clasament | Diferente pentru olimpici intre reviziile 38 si 180 | Cod sursa (job #167746)
Cod sursa(job #167746)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NMAX 36001
long n,i,ordine[NMAX+2],j,contor;
char mat[NMAX+1][19];
int compare1(const void *a, const void *b)
{ return int( *(char*)a - *(char*)b ); }
int compare2(const void *a, const void *b)
{
long t1 = *(long*)a, t2 = *(long*)b;
return strcmp( mat[ t1 ], mat[ t2 ] );
}
main()
{ freopen("restante.in","r",stdin);
freopen("restante.out","w",stdout);
scanf("%ld",&n); gets(mat[0]);
for(i=1; i<=n; i++)
{
gets(mat[i]); ordine[i]=i;
qsort(mat[i], strlen(mat[i]),
sizeof(char), compare1);
}
qsort(ordine, n, sizeof(long), compare2);
#define cmp strcmp( mat[ordine[j]] , mat[ordine[j+1]] )
for(i=1; i<=n; i++)
{ j=i;
while(cmp==0) j++;
if(j==i) contor++;
i=j;
}
#undef cmp
printf("%ld\n",contor); return 0; }