Cod sursa(job #18367)

Utilizator sima_cotizoSima Cotizo sima_cotizo Data 18 februarie 2007 11:46:31
Problema Amlei Scor 0
Compilator c Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 1.08 kb
#include <stdio.h>
#include <string.h>
#define FIN "amlei.in"
#define FOUT "amlei.out"
#define MAX 501
#define abs(c) (c<0)?(-c):c

long N, t, u;
long long E1[MAX], E2[MAX], ex1, ex2;

int main() {
	long i,j,c;
	freopen(FIN, "r", stdin);
	freopen(FOUT, "w", stdout);

	while ( !feof(stdin)) {
		memset(E1, 0, sizeof(long long) * (t+1));
		memset(E2, 0, sizeof(long long) * (u+1));
		scanf("%ld %ld %ld\n", &N, &t, &u);
		if (N==0 || t==0 || u==0)
			break;

		for (i=0; i<t; ++i) {
			for (j=0; j<N; ++j) {
				scanf("%ld", &c);
				if ( c > 0 )
					E1[i] |= 1 << c;
			}
		}
		scanf("\n");
		for (i=0; i<u; ++i) {
			for (j=0; j<N; ++j) {
				scanf("%ld", &c);
				if ( c > 0 )
					E2[i] |= 1 << c;
			}
		}
		scanf("\n");

		for (i=0; i<t; ++i) {
			long ok=0;
			for (j=0; j<u; ++j)
				if ( E1[i] == E2[j] )
					E2[j] = -1, ok=1;
			if (ok) 
				E1[i] = -1;
		}

		ex1=0, ex2=0;
		for (i=0; i<t; ++i)
			if ( E1[i] > 0 )
				ex1 |= E1[i];
		for (i=0; i<u; ++i)
			if ( E2[i] > 0 )
				ex2 |= E2[i];
		printf("%s\n", (ex1==ex2) ? "DA" : "NU");
	}

	fclose(stdout);
	fclose(stdin);
	return 0;
}