Cod sursa(job #397952)

Utilizator RoswenRus Alexandru Roswen Data 17 februarie 2010 19:19:48
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define smax 36010
#define lmax 17
using namespace std;

FILE *f=fopen("restante.in","r"), *g=fopen("restante.out","w");
int k,sw,i,n;
char v[smax][lmax];
char v1[smax/2][lmax];
char v2[smax/2][lmax];
void ints(char a[], char b[])
{
	char aux[17];
		strcpy(aux, a);
		strcpy(a, b);
		strcpy(b, aux);
}

void merge(long ls, long ld)
{
	if (ls<ld)
	{
		long k=(ls+ld)/2;	
		merge(ls,k);
		merge(k+1,ld);

		int n1=0,n2=0;
		for (long i=ls;i<=k;i++)
			strcpy(v1[++n1],v[i]);
		for (long i=k+1;i<=ld;i++)
			strcpy(v2[++n2],v[i]);

		long i1=1;
		long i2=1;

		k=ls;

		while (i1<=n1 && i2<=n2)
			if (strcmp(v1[i1],v2[i2])<0)
				strcpy(v[k++],v1[i1++]);
			else
				strcpy(v[k++],v2[i2++]);

		while (i1<=n1)
			strcpy(v[k++],v1[i1++]);

		while (i2<=n2)
			strcpy(v[k++],v2[i2++]);
	}
}

int main()
{
	fscanf(f, "%d", &n);
	for(i=1;i<=n;i++)
	{
		fscanf(f, "%s", v[i]);
		sort( v[i], v[i]+strlen(v[i]) );
	}
	
	merge(1,n);
	
	for(i=1;i<=n;i++)
		if( strcmp(v[i], v[i-1]) && strcmp(v[i],v[i+1]) )
			k++;
		
	fprintf(g,"%d", k);	
	return 0;	
			
}