Cod sursa(job #423151)

Utilizator nandoLicker Nandor nando Data 23 martie 2010 15:50:59
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>

FILE* fin=fopen("restante.in","r");
FILE* fout=fopen("restante.out","w");

typedef unsigned long long int64;

int n,nc=0;
int64 cuv[36005][2];

int cmp(const void* p1,const void* p2){
	int64* a=(int64*)p1,*b=(int64*)p2;
	return (a[0]==b[0])?((a[1]<b[1])?-1:1):((a[0]<b[0])?-1:1);
}

void addWord(){
	char buf[20],freq[27],a;
	fgets(buf,sizeof(buf),fin);
	memset(freq,0,sizeof(freq));
	for(int i=0;buf[i];i++){
		freq[buf[i]-'a']++;
	}
	for(int i=0;i<=26;i++){
		cuv[nc][i>>4]|=(int64)freq[i];
		if(i!=15){
			cuv[nc][i>>4]<<=4;
		}
	}
	nc++;
}

int main(){
	fscanf(fin,"%d ",&n);
	for(int i=0;i<n;i++){
		addWord();
	}
	qsort(cuv,nc,sizeof(int64)*2,cmp);
	int cnt=0,nu=0;
	for(int i=0;i<nc;i++){
		cnt=0;
		while(cuv[i][0]==cuv[i+1][0]&&cuv[i][1]==cuv[i+1][1]&&i+1<nc){
			cnt++,i++;
		}
		if(cnt==0){
			nu++;
		}
	}
	fprintf(fout,"%d\n",nu);
	fclose(fin);
	fclose(fout);
	return 0;
}