Cod sursa(job #302848)

Utilizator lucaz0rLuca Liviu lucaz0r Data 9 aprilie 2009 12:34:20
Problema Restante Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define a(i,j) a[(i)*18+(j)]
//#define a(i,j) a[i][j]

int sort_function( const void *a, const void *b)
{
   return( strcmp((char *)a,(char *)b) );
}

int main() {

	long n, i, j, len, nr;
	char c;
	char *a;
	FILE *f;

	f = fopen ("restante.in", "r");
	freopen ("restante.out", "w", stdout);

	fscanf (f,"%ld\n",&n);

	a = (char*) malloc ((n+1) * 18 * sizeof (char));
	i = 1;   j = 1;

	while (fscanf(f,"%c",&c), !feof(f)) {
		if (c == '\n') {
			a(i,j) = 0;
			i++; j = 1; a(i,0) = 'O';
			}
		else {
			a(i,j) = c;
			j++;
		}
	}
	for (i = 1; i <= n; i++)
	 qsort(&a(i,1), strlen(&a(i,1)), sizeof(char), sort_function);

	/*for (i = 1; i <= n; i++)
		printf ("%s\n",&a(i,1));  */

	for (i = 1; i <= n; i++) {
		for(j =i+1; j <= n; j++)
			if (a(j,0) == 'O' && strcmp(&a(i,1), &a(j,1)) == 0) {
				a(i,0) = 'N';
				a(j,0) = 'N';
				while (j < n)
					if (strcmp (&a(i,1), &a(++j,1)) == 0) {
						a(j,0) = 'N';
					}
			}
		}

	nr = 0;

	for (i = 1; i <= n; i++)
		if (a(i,0) == 'O') nr++;
   /*	for (i = 1; i <= n; i++)
		printf ("%s\n",&a(i,0));  */


	printf ("%ld",nr);
    

	fclose(f);


	return 0;
}