Cod sursa(job #11749)

Utilizator peanutzAndrei Homorodean peanutz Data 1 februarie 2007 15:51:42
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <stdio.h>
#include <string.h>

#define NMAX 40

typedef struct nod
{
char s[15];
};
nod nods[NMAX];

int nr;

int n;
char s[NMAX*2];
int a[NMAX][NMAX];


int numarartisti = 1;


void getnods(int trupa, int len, int count)
{
int i;


for(i = 0; i < nr; ++i)
	{
		if(!strcmp(s, nods[i].s))
			{

				a[trupa][count] = i;

				return ;
			}
	}

memcpy(nods[nr].s, s, len*sizeof(char));

a[trupa][count] = nr++;

}

void read()
{
int i, j, count, k;
char c[NMAX*6];

scanf("%d\n", &n);

for(i = 0; i < n; ++i)
	{
		j = k = 0;

		count = 1;

		fgets(c, NMAX*5, stdin);


		while(c[k] != '\n')
			{
				//scanf("%c", &c);

				if(c[k] == ',')
					{
						s[j] = '\0';

						getnods(i, j, count);

						++count;

						s[0] = '\0';
						j = 0;

						//++numarartisti;

						++a[i][12];
					}

				else

				      {
						s[j++] = c[k];

				      }



				++k;


				if(c[k] == '\n')
					{
												s[j] = '\0';

						getnods(i, j, count);

                                                ++count;

						s[0] = '\0';
						j = 0;

						//++numarartisti;

						++a[i][12];
					}
			}


	}
}

int numara()
{
int for1, for2, for3, for4, ok;


for(for1 = 0; for1 < n; ++for1)
	{
		if(a[for1][0] == 0)
			a[for1][0] = numarartisti++;

		for(for2 = for1+1; for2 < n; ++for2)
			{
				ok = 1;

				for(for3 = 1; for3 <= a[for1][12]  &&  ok; ++for3)
					for(for4 = 1; for4 <= a[for2][12]; ++for4)
						if(a[for1][for3] == a[for2][for4])
							ok = 0;

				if(!ok)
					a[for2][0] = a[for1][0];

			}
	}
return numarartisti-1;
}

void print_a()
{
int i, j;

for(i = 0; i < NMAX; ++i)
	{
		for(j = 0; j < NMAX; ++j)
			printf("%d ", a[i][j]);
		printf("\n");
	}
}

int main()
{
freopen("festival.in", "r", stdin);
freopen("festival.out", "w", stdout);


read();


printf("%d\n", numara());


print_a();


fclose(stdin);
fclose(stdout);

return 0;
}