Cod sursa(job #144939)

Utilizator slayer4uVictor Popescu slayer4u Data 28 februarie 2008 09:57:35
Problema Restante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#include <string.h>


char aux, B[36010][20], x[36010][20];
long a, b, i, j, n, num, k, nr;

void merge(long st, long dr)
{
	long m = (st + dr) >> 1;
	long i, j, k;
  
	if (st == dr) 
		return;
	
	merge(st, m);
	merge(m + 1, dr);

	j = m + 1;
	k = st;
	for (i = st; i <= m || j <= dr;)
		if (j > dr || (i <= m && strcmp(x[i], x[j]) < 0))
			strcpy(B[k ++], x[i ++]);
		else
			strcpy(B[k ++], x[j ++]);

	for (k = st; k <= dr; k ++)
		strcpy(x[k], B[k]);
}


int main()
{
	freopen ("restante.in", "rt", stdin);
	freopen ("restante.out", "wt", stdout);

	scanf("%ld\n", &n);
	for (i = 0; i < n; i ++)
		fgets(x[i], 20, stdin);

	for (i = 0; i < n; i ++)
	{
		k = strlen(x[i]);
		for (a = 0; a < k - 1; a ++)
			for (b = a + 1; b < k; b ++)
				if (x[i][a] > x[i][b])
					aux = x[i][a], x[i][a] = x[i][b], x[i][b] = aux;
	}

	merge(0, n - 1);

	for (i = 0; i < n; i ++)
		if (strcmp(x[i], x[i + 1]))
		{
			if (!nr)
				num ++;
			nr = 0;
		}
		else
			nr ++;

	printf("%ld\n", num);
	return 0;
}