Cod sursa(job #129882)

Utilizator znakeuJurba Andrei znakeu Data 30 ianuarie 2008 15:28:41
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct thingy
{
	char c[22];
};

thingy v[36001];
int sol=0;

int cmp(const void *a, const void *b)
{
	return (*(char*)a-*(char*)b);
}

int cmp2(const void *a, const void *b)
{
	thingy x=*(thingy*)a, y=*(thingy*)b;
	if (strlen(x.c)>strlen(y.c))
		return 1;
	if (strlen(x.c)<strlen(y.c))
		return -1;
	int k=strlen(x.c),i;
	for (i=0; i<k; i++)
		if (x.c[i]>y.c[i])
			return 1;
		else
			if (x.c[i]<y.c[i])
				return -1;
	return 0;
}

int cmp3(int x, int y)
{
	if (strlen(v[x].c)>strlen(v[y].c))
		return 1;
	if (strlen(v[x].c)<strlen(v[y].c))
		return -1;
	int k=strlen(v[x].c),i;
	for (i=0; i<k; i++)
		if (v[x].c[i]>v[y].c[i])
			return 1;
		else
			if (v[x].c[i]<v[y].c[i])
				return -1;
	return 0;
	
	
}



int main ()
{
	int i,k,n;
	char whateva[20];
	FILE *in  = fopen("restante.in","r");
	FILE *out = fopen("restante.out","w");
	
	fscanf (in,"%d",&n);
	
	if (n==1)
	{
		fprintf(out,"1\n");
		fclose(out);
		fclose(in);
		return 0;
	}
	
	fgets(whateva,20,in);
	k=sizeof(v[0].c[0]);
	for (i=0; i<n; i++)
	{
		fgets(v[i].c,20,in);
		if (v[i].c[strlen(v[i].c)-1]=='\n')
			v[i].c[strlen(v[i].c)-1]=0;
		qsort(v[i].c,strlen(v[i].c),k,cmp);
	}
	
	qsort(v,n,sizeof(v[0]),cmp2);
	
	if (cmp3(0,1)!=0)
		sol++;
	if (cmp3(n-1,n-2)!=0)
		sol++;
	
	for (i=1; i<n-1; i++)
		if (cmp3(i-1,i)!=0 && cmp3(i,i+1)!=0)
			sol++;
	
	fprintf(out,"%d\n",sol);
	
	fclose(in);
	fclose(out);
	
	return 0;
}