Cod sursa(job #19767)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 19 februarie 2007 22:18:17
Problema Amlei Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.09 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] |= (1LL << 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] |= (1LL << x);
                }
            }
        }

        for (i = 1; i < T; i ++) {
            for (j = i + 1; j <= T; j ++) {
                if ((rez1[i] ^ rez1[j]) == ((1LL << (N + 1)) - 1)) {
                    rez1[i] = -1;
                }
                if ((rez2[i] ^ rez2[j]) == ((1LL << (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;
}