Cod sursa(job #127016)

Utilizator andrei.12Andrei Parvu andrei.12 Data 23 ianuarie 2008 09:55:08
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#define lg 36005

using namespace std;

int nr, i, j, st[lg], x, n, raspuns, r[lg], pz;
char vc[lg][20], vn[lg][20], s[20];
/*
int cmp(int a, int b){
	if (strcmp(vc[a], vc[b]) > 0)
		return 0;
	return 1;
}
*/
int cp1(char a, char b){
	if (a > b)
		return 0;
	return 1;
}
int cmp (const void*a, const void*b){
	int x = *(int*)a, y = *(int*)b;
	int v = strcmp(vc[x], vc[y]);
	
	if (v < 0)
		return -1;
	if (v > 0)
		return 1;
	return 0;
}
int main()
{
	freopen("restante.in", "rt", stdin);
	freopen("restante.out", "wt", stdout);
	
	scanf("%d\n", &nr);
	
	for (i = 1; i <= nr; i ++){
		scanf("%s", s);
		n = strlen(s);
		sort(s, s+n, cp1);
		
		for (j = 0; j < n; j ++)
			vc[i][j] = s[j];
	}
	
	for (i = 1; i <= nr; i ++)
		st[i] = i;
	
	//sort(st+1, st+nr+1, cmp);
	qsort(st, nr+1, sizeof(st[0]), cmp);
	
	for (i = 1; i <= nr; i ++){
		x = st[i];
		
		n = strlen(vc[x]);
		for (j = 0; j < n; j ++)
			vn[i][j] = vc[x][j];
	}
	
	r[1] = 1;
	pz = 1;
	for (i = 2; i <= nr; i ++)
		if (strcmp(vn[i], vn[i-1]) == 0)
			r[pz] ++;
		else
			r[++pz] = 1;
	
	for (i = 1; i <= pz; i ++)
		if (r[i] == 1)
			raspuns ++;
	
	printf("%d\n", raspuns);
	
	return 0;
}