Cod sursa(job #691661)

Utilizator beldeabogdanBogdan Beldea beldeabogdan Data 26 februarie 2012 12:35:25
Problema Restante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("restante.in");
ofstream g("restante.out");
struct cuvant {
	int c[28];
	bool o;
};
cuvant v[36005];
int n,i,j,nr;
char a;
bool check (cuvant a,cuvant b) {
	int i;
	if (a.c[0]!=b.c[0]) 
		return false;
	for (i=1;i<=27;i++) 
		if (a.c[i]!=b.c[i]) 
			return false;
	return true;
}
bool cmp (cuvant a,cuvant b) {
	if (a.c[0]<b.c[0]) return 1;
	else if (a.c[0]>b.c[0]) return 0;
	for (i=1;i<=27;i++) {
		if (a.c[i]<b.c[i]) return 1;
		if (a.c[i]>b.c[i]) return 0;
	}
	return 1;
}
int main() {
	f>>n;
	f.get();
	for (i=1;i<=n;i++) {
		f.get(a);
		j=1;
		while (a!='\n') {
			v[i].c[(int)a-'a'+1]++;
			j++;
			f.get(a);
		}
		v[i].c[0]=j;
	}
	sort(v+1,v+n+1,cmp);
	nr=n;
	for (i=2;i<=n;i++) if (check(v[i-1],v[i])) {
		if (!v[i-1].o) nr--;
		if (!v[i].o) nr--;
		v[i-1].o=true;
		v[i].o=true;
	}
	g<<nr;
	return 0;
}