Cod sursa(job #143083)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 25 februarie 2008 22:01:45
Problema Restante Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int v[36009],n;
short int frecv[36009];
char m[36009][20];
void interschimb(int lin1, int lin2){
	int i,ll1,ll2;
	char aux;
	ll1=strlen(m[lin1]);
	ll2=strlen(m[lin2]);
	for(i=0;i<ll1 || i<ll2;i++){
		aux=m[lin1][i];
		m[lin1][i]=m[lin2][i];
		m[lin2][i]=aux;
	}
}
void transform(int l){
	int x;
	x=strlen(m[l]);
	sort(m[l],m[l]+x);
} 
void sorteaza_linia(int p) //sortez elementele de pe linia p
   {
    long i,j,frecv[28];
    for(i=0;i<=26;++i) frecv[i]=0;
    long n, nr=0;
    n=strlen(m[p]);
    for(i=0;i<n;++i) frecv[m[p][i]-97]++;
    for(i=0;i<26;++i)
       {
while(frecv[i])
  {
   m[p][nr++]=char(i+97);
   frecv[i]--;
}
       }
    }
void sortez(){
	int i,j,gata,inj;
	inj=n;
	while(inj>1){
		inj/=2;
		do{
			gata=1;
			for(i=1;i<=n-inj;i++)
				if(strcmp(m[i],m[i+inj])>0){
					interschimb(i,i+inj);
					gata=0;
				}
		}
		while(!gata);
	}
}
int main(){
	int i,sol=0;
	freopen("restante.in","r",stdin);
	freopen("restante.out","w",stdout);
	scanf("%d\n",&n);
	for(i=1;i<=n;i++) {
		scanf("%s\n",m[i]);
		transform(i);
	}
	sortez();
	for(i=1;i<n;i++)
		if(strcmp(m[i],m[i+1])==0) { frecv[i]=1; frecv[i+1]=1;}
	for(i=1;i<=n;i++)
		if(!frecv[i]) sol++;
//	for(i=1;i<=n;i++)
//		printf("%s\n",m[i]);
	printf("%d",sol);
	return 0;
}