Cod sursa(job #125757)

Utilizator tvladTataranu Vlad tvlad Data 20 ianuarie 2008 17:38:02
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int N = 36000;

class cuvant {
public:
	int v[26];
	cuvant() {
		for (int i = 0; i < 26; ++i) v[i] = 0;
	};
	cuvant ( char a[] ) {
		for (int i = 0; i < 26; ++i) v[i] = 0;
		for (int i = 0; a[i] != '\0'; ++i) ++v[a[i]-'a'];
	};
};
bool operator< ( const cuvant &a, const cuvant &b ) {
	for (int i = 0; i < 26; ++i)
		if (a.v[i] != b.v[i])
			return a.v[i] < b.v[i];
	return false;
}
bool operator== ( const cuvant &a, const cuvant &b ) {
	for (int i = 0; i < 26; ++i)
		if (a.v[i] != b.v[i])
			return false;
	return true;
}

int n;
bool naspa[N];

int main() {
	freopen("restante.in","rt",stdin);
	freopen("restante.out","wt",stdout);
	scanf("%d\n",&n);
	vector<cuvant> v;
	char cuv[20];
	for (int i = 0; i < n; ++i) {
		scanf("%s\n",cuv);
		cuvant a(cuv);
		v.push_back(a);
	}
	sort(v.begin(),v.end());
	int r = 1;
	for (int i = 1; i < v.size(); ++i) {
		if (v[i] == v[i-1]) {
			if (naspa[i-1]) {
				naspa[i] = true;
			} else {
				naspa[i] = naspa[i-1] = true;
				--r;
			}
		} else {
			++r;
		}
	}
	printf("%d\n",r);
	return 0;
}