Cod sursa(job #764373)

Utilizator Andrei.XweCobzaru Adrian-Andrei Andrei.Xwe Data 4 iulie 2012 22:16:37
Problema Restante Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<fstream>
using namespace std;
#include<algorithm>
#include<cstring>
char c[36005][16];
int v[36005],s[36005];
bool cmp(int a,int b)
{
	int i;
	int min=s[a];
	if(min>s[b])
		min=s[b];
	for(i=0;i<min;i++)
		if(c[a][i]!=c[b][i])
			break;
	if(i==min)
		return s[a]<s[b];
	return c[a][i]<c[b][i];
}
int main()
{
	ifstream fcin("restante.in");
	ofstream fcout("restante.out");
	int j,n,i,nr=0,ok;
	fcin>>n;
	for(i=1;i<=n;i++)
	{
		fcin.get();
		fcin.get(c[i],16);
		s[i]=strlen(c[i]);
		sort(c[i],c[i]+s[i]);
	}
	for(i=1;i<=n;i++)
		v[i]=i;
	sort(v+1,v+n+1,cmp);
	for(i=2;i<n;i++)
	{
		ok=0;
		if(s[v[i]]==s[v[i-1]])
		{
			for(j=0;j<s[v[i]];j++)
				if(c[v[i-1]][j]!=c[v[i]][j])
					break;
			if(j!=s[v[i]])
				ok++;
		}
		else
			ok++;
		if(ok)
			if(s[v[i]]==s[v[i+1]])
			{
				for(j=0;j<s[v[i]];j++)
					if(c[v[i+1]][j]!=c[v[i]][j])
						break;
				if(j!=s[v[i]])
					ok++;
			}
			else
				ok++;
		if(ok==2)
			nr++;
	}
	if(s[v[1]]==s[v[2]])
	{
		for(j=0;j<s[v[1]];j++)
			if(c[v[1]][j]!=c[v[2]][j])
				break;
		if(j!=s[v[1]])
			nr++;
	}
	else
		nr++;
	if(s[v[n]]==s[v[n-1]])
	{
		for(j=0;j<s[v[n]];j++)
			if(c[v[n]][j]!=c[v[n-1]][j])
				break;
		if(j!=s[v[n]])
			nr++;
	}
	else
		nr++;
	fcout<<nr;
	return 0;
}