Cod sursa(job #310193)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 1 mai 2009 22:31:42
Problema Restante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <string.h>
#define N 36005
#define P  20
using namespace std;
char s[P];
int v[N][P];
int n;
void citire()
{
	scanf("%d\n",&n);
	int i,t,j;
	for (i=1; i<=n; i++)
	{
		fgets(s+1,P,stdin);
		t=(int)strlen(s+1);
		for (j=1; j<=t && s[j]!='\n'; j++)
			v[i][++v[i][0]]=(int)s[j]-96;
	}
}
void sortare_litere()
{
	int i,j,x[P];
	for (i=1; i<=n; i++)
	{
		for (j=1; j<=v[i][0]; j++)
			x[j]=v[i][j];
		sort(x+1,x+v[i][0]+1);
		for (j=1; j<=v[i][0]; j++)
			v[i][j]=x[j];
	}
}
void sortare_cuvinte()
{
	int i,j,k,x[N],t,pmin;
	for (i=1; i<n; i++)
	{
		pmin=i;
		for (j=i+1; j<=n; j++)
		{
			if (v[j][0]<v[pmin][0])
				pmin=j;
			else
				if (v[pmin][0]==v[j][0])
					for (k=1; k<=v[pmin][0]; k++)
					{
						if (v[j][k]<v[pmin][k])
						{
							pmin=j;
							break;
						}
						else
							if (v[j][k]==v[pmin][k])
								;
							else
								break;
					}
		}
		if (pmin!=i)
		{
			x[0]=v[i][0];
			for (j=1; j<=v[i][0]; j++)
				x[j]=v[i][j];
			for (j=1; j<=v[pmin][0]; j++)
				v[i][j]=v[pmin][j];
			t=v[pmin][0];
			v[pmin][0]=x[0];
			v[i][0]=t;
			for (j=1; j<=x[0]; j++)
				v[pmin][j]=x[j];
		}
	}
}
void rezolvare()
{
	int i,j,rez=1,identic,pur=1;
	for (i=2; i<=n; i++)
	{
		if (v[i][0]==v[i-1][0])
		{
			identic=1;
			for (j=1; j<=v[i][0]; j++)
				if (v[i][j]!=v[i-1][j])
				{
					identic=0;
					break;
				}
			if (identic==0)
			{
				rez++;
				pur=1;
			}
			else
				if (pur)
				{
					rez--;
					pur=0;
				}
		}
		else
		{
			rez++;
			pur=1;
		}
	}
	printf("%d\n",rez);
}
int main()
{
    freopen("restante.in","r",stdin);
    freopen("restante.out","w",stdout);
    citire();
	sortare_litere();
	sortare_cuvinte();
	rezolvare();
    return 0;
}