Cod sursa(job #340178)

Utilizator ZethpixZethpix Zethpix Data 13 august 2009 15:30:28
Problema Restante Scor 100
Compilator cpp Status done
Runda w2 Marime 1.36 kb
#include <stdio.h>
#include <string.h>
char d[18];
char c[36002][18];
long n,i,t;
void inter(long x,long m,long y){
	char a[18];
	for(i=x;i<=y;i++) a[i]=d[i];
	long i1=x;
	long i2=m+1;
	long k=x-1;
	while(i1<=m&&i2<=y)
		if(a[i1]<a[i2]) d[++k]=a[i1++];
		else d[++k]=a[i2++];
	for(i=i1;i<=m;i++) d[++k]=a[i];
	for(i=i2;i<=y;i++) d[++k]=a[i];
}
void sort(long x,long y){
	if(x!=y){
		long m=(x+y)/2;
		sort(x,m);
		sort(m+1,y);
		inter(x,m,y);
	}
}
void minter(long x,long m,long y){
	char a[36002][18];
	for(i=x;i<=y;i++) strcpy(a[i],c[i]);
	long i1=x;
	long i2=m+1;
	long k=x-1;
	while(i1<=m&&i2<=y)
		if(strcmp(a[i1],a[i2])<0) strcpy(c[++k],a[i1++]);
		else strcpy(c[++k],a[i2++]);
	for(i=i1;i<=m;i++) strcpy(c[++k],a[i]);
	for(i=i2;i<=y;i++) strcpy(c[++k],a[i]);
}
void msort(long x,long y){
	if(x!=y){
		long m=(x+y)/2;
		msort(x,m);
		msort(m+1,y);
		minter(x,m,y);
	}
}
int main(){
	FILE *f,*g;
	f=fopen("restante.in","r");
	g=fopen("restante.out","w");
	fscanf(f,"%ld\n",&n);
	for(t=1;t<=n;t++){
		fgets(d,18,f);
		sort(0,strlen(d)-1);
		strcpy(c[t],d);
	}
	long nr=n*2;
	msort(1,n);
	for(i=1;i<=n;i++){
		if (strcmp(c[i],c[i+1])==0){ 
			if(i<n)
				nr-=2;
		}
		else
			if(strcmp(c[i-1],c[i])==0){
				if(i>1)
					nr-=2;
			}
			else nr--;
	}
	fprintf(g,"%ld\n",nr);
	fclose(f);
	fclose(g);
	return 0;
}