Cod sursa(job #236079)

Utilizator alex_mircescuAlex Mircescu alex_mircescu Data 26 decembrie 2008 19:14:24
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>
#include <math.h>
#include <string.h>

#define MAXN 1025

long n, k, A[MAXN], B[MAXN], H[MAXN], L[MAXN], i, nr, h, l, j, num, choice;

void init() {
	for (long i = 1; i <= n; ++i) {
		H[i] = L[i] = 1;
	}
}

void minus(long *a, long *b) {
	for (long i = 1; i <= n; ++i) {
		if (a[i] == 1 && b[i] == 0) {
			a[i] = 1;
		} else {
			a[i] = 0;
		}
	}
}

void inter(long *a, long *b) {
	for (long i = 1; i <= n; ++i) {
		if (!(a[i] == 1 && b[i] == 1)) {
			a[i] = 0;
		}
	}
}


int main() {
	freopen("balanta.in", "r", stdin);
	freopen("balanta.out", "w", stdout);
	scanf("%ld %ld", &n, &k);
	init();
	for (i = 1; i <= k; ++i) {
		scanf("%ld", &nr);
		memset(A, 0, sizeof(A));
		memset(B, 0, sizeof(B));
		for (j = 1; j <= nr; ++j) {
			scanf("%ld", &num);
			A[num] = 1;
		}
		for (j = 1; j <= nr; ++j) {
			scanf("%ld", &num);
			B[num] = 1;
		}
		scanf("%ld", &choice);
		if (choice == 0) {
			minus(H, A);minus(H, B);
			minus(L, A);minus(L, B);
		}
		if (choice == 1) {
			inter(H, A);
			inter(L, B);
		}
		if (choice == 2) {
			inter(H, B);
			inter(L, A);
		}
	}
	for (i = 1; i <= n; ++i) {
		if (H[i] == 1) {
			++h;
			num = i;
		}
		if (L[i] == 1) {
			++l;
			num = i;
		}
	}
	if (h == 1 && l == 0 || h == 0 && l == 1) {
		printf("%ld\n", num);
	} else {
		printf("0");
	}
	return 0;
}