Cod sursa(job #19394)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 19 februarie 2007 14:04:50
Problema Amlei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int N_MAX = 512;

int rez1[N_MAX], rez2[N_MAX], a[N_MAX], b[N_MAX];

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

	int N, T, U, nr, i, j, x;
	while (scanf("%d %d %d\n", &N, &T, &U) != EOF) {

		memset(rez1, 0, sizeof(rez1));
		memset(rez2, 0, sizeof(rez2));
		
		for (i = 1, nr = 1; i <= N * T; i += N, nr ++) {
			for (j = i; j < i + N; j ++) {
				scanf("%d ", &x);
				if (x > 0) {
					rez1[nr] |= (1 << x);
				}
			}
		}

		for (i = 1, nr = 1; i <= N * U; i += N, nr ++) {
			for (j = i; j < i + N; j ++) {
				scanf("%d ", &x);
				if (x > 0) {
					rez2[nr] |= (1 << x);
				}
			}
		}

		/*for (i = 1; i < T; i ++) {
			for (j = i + 1; j <= T; j ++) {
				if ((rez1[i] ^ rez1[j]) == ((1 << (N + 1)) - 1)) {
					rez1[i] = -1;
				}
				if ((rez2[i] ^ rez2[j]) == ((1 << (N + 1)) - 1)) {
					rez2[i] = -1;
				}
			}
		}*/
	
		sort(rez1 + 1, rez1 + T + 1);
		sort(rez2 + 1, rez2 + U + 1);

		for (i = 2; i <= T; i ++) {
			if (rez1[i] == rez1[i - 1]) {
				rez1[i] = -1;
			}
		}

		for (i = 2; i <= U; i ++) {
			if (rez2[i] == rez2[i - 1]) {
				rez2[i] = -1;
			}
		}

		a[0] = 0, b[0] = 0;
		for (i = 1; i <= T; i ++) {
			if (rez1[i] != -1) {
				a[++ a[0]] = rez1[i];
			}
		}
		
		for (i = 1; i <= U; i ++) {
			if (rez2[i] != -1) {
				b[++ b[0]] = rez2[i];
			}
		}

		for (i = 1; i <= a[0]; i ++) {
			if (a[i] != b[i]) {
				printf("NU\n");
				break;
			}
		}
		if (i == a[0] + 1) {
			printf("DA\n");
		}
	}
	
	return 0;
}