Cod sursa(job #25387)

Utilizator snaked31Stanica Andrei snaked31 Data 4 martie 2007 12:24:24
Problema Balanta Scor 40
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 2.7 kb
#include <stdio.h>

#define nm 1111

int n, m, i, j, k, rez, sol, x, px;
int s[nm], a[nm], b[nm], s1[nm][nm];


void read()

{
	scanf("%d %d", &n, &m);
}


void solve()

{
	for (i=1; i<=n; i++)
		s[i] = -1;
	for (i=1; i<=m; i++)
	{
		for (j=1; j<=n; j++)
			s1[i][j] = s1[i-1][j];
		scanf("%d ", &k);
		for (j=1; j<=k; j++)
			scanf("%d ", &a[j]);
		for (j=1; j<=k; j++)
			scanf("%d ", &b[j]);
		
		scanf("%d ", &rez);
//		printf("rez %d\n", rez);
		
		if (rez == 0)
		{
			for (j=1; j<=k; j++)
			{
				s[a[j]] = 0;
				s1[i][a[j]] = 0;
				s[b[j]] = 0;
				s1[i][b[j]] = 0;
			}
		}
		else
		if (rez == 1)
		{
			for (j=1; j<=k; j++)
			{
				if (s[a[j]] != 0)
				{
					s[a[j]] = 2;
					s1[i][a[j]] = 2;
				}
				if (s[b[j]] != 0)
				{
					s[b[j]] = 1;
					s1[i][b[j]] = 1;
				}
			}
		}
		else
		{
			for (j=1; j<=k; j++)
			{
				if (s[a[j]] != 0)
				{
					s[a[j]] = 1;
					s1[i][a[j]] = 1;
				}
				if (s[b[j]] != 0)
				{
					s[b[j]] = 2;
					s1[i][b[j]] = 2;
				}
			}
		}
	}
}


void write()

{
	freopen("balanta.in", "r", stdin);
	sol = 0;
//	for (i=1; i<=n; i++)
//		printf("%d ", s1[3][i]);
//	printf("\n");
	scanf("%d %d", &n, &m);
	for (i=1; i<=m; i++)
	{
		scanf("%d ", &k);
		for (j=1; j<=k; j++)
			scanf("%d ", &a[j]);
		for (j=1; j<=k; j++)
			scanf("%d ", &b[j]);
			
		scanf("%d ", &rez);
		if (k == 1)
		{
			x = 0;
			if (rez == 1 || rez == 2)
			{
				//printf("%d %d \n", s[a[1]], s1[m-1][a[1]]);
				if (s[a[1]] == s1[m-1][a[1]])
				{
					x++;
					px = a[1];
				}
				//printf("%d %d \n", s[b[1]], s1[m-1][b[1]]);
				if (s[b[1]] == s1[m-1][b[1]])
				{
					x++;
					px = b[1];
				}
			}
			if (x == 1)
				sol = px;
		}
		else
		if (rez == 1)
		{
			x = 0;
			for (j=a[1]; j<=a[k]; j++)
				if (s[j] != rez && s[j] != 0)
				{
					if (s1[m-1][j] != s[j])
					{
					x++;
					px = j;
					}
				}
			//if (x == 1)
			//	sol = px;
				
//			printf("ssol %d ", sol);
			
			//x = 0;
			for (j=b[1]; j<=b[k]; j++)
				if (s[j] == rez && s[j] != 0)
				{
					if (s1[m-1][j] == s[j])
					{
					x++;
					px = j;
					}
				}
			if (x == 1)
				sol = px;
		}
		else
		if (rez == 2)
		{
			x = 0;
			for (j=a[1]; j<=a[k]; j++)
				if (s[j] != rez && s[j] != 0)
				{
					if (s1[m-1][j] == s[j])
					{
					x++;
					px = j;
					}
				}
			//if (x == 1)
			//	sol = px;
				
//			printf("ssol %d ", sol);
			//x = 0;
			for (j=b[1]; j<=b[k]; j++)
				if (s[j] == rez && s[j] != 0)
				{
					if (s1[m-1][j] != s[j])
					{
					x++;
					px = j;
					}
				}
			if (x == 1)
				sol = px;
		}
//		printf("sol %d\n", sol);
	}
	
	printf("%d\n", sol);
}


int main()

{
	freopen("balanta.in", "r", stdin);
	freopen("balanta.out","w",stdout);
	
	read();
	solve();
	write();
	
	fclose(stdin);
	fclose(stdout);

	return 0;
}