Cod sursa(job #24940)

Utilizator dominoMircea Pasoi domino Data 4 martie 2007 01:18:40
Problema Balanta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>

#define MAX_N 1024
#define FIN "balanta.in"
#define FOUT "balanta.out"

int N, M, result[MAX_N];
char A[MAX_N][MAX_N], buf[262144], *p;

inline int get(void)
{
    int n;

    for (n = 0; *p >= '0' && *p <= '9'; p++)
        n = n*10 + *p-'0';
    for (; *p == ' '; p++);
    return n;
}

int main(void)
{
    int i, j, cnt, x;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    scanf("%d %d", &N, &M);
    for (i = 0; i < M; i++)
    {
        fgets(buf, sizeof(buf), stdin); p = buf;
        cnt = get();
        for (j = 0; j < cnt; j++)
        {
            x = get()-1;
            A[i][x] = 1;
        }
        for (j = 0; j < cnt; j++)
        {
            x = get()-1;
            while (A[i][x]);
            A[i][x] = 2;
        }
        result[j] = get();
    }

    for (cnt = i = 0; i < N; i++)
    {
        for (j = 0; j < M; j++)
        {
            if (!A[j][i] && result[j]) break;
            if (A[j][i] == 1 && result[j] != 2) break;
            if (A[j][i] == 2 && result[j] != 1) break;
        }
        if (j == M) cnt++, x = i;

        for (j = 0; j < M; j++)
        {
            if (!A[j][i] && result[j]) break;
            if (A[j][i] == 1 && result[j] != 1) break;
            if (A[j][i] == 2 && result[j] != 2) break;
        }
        if (j == M) cnt++, x = i;
    }

    printf("%d\n", cnt != 1 ? 0 : x+1);

    return 0;
}