Cod sursa(job #935642)

Utilizator rudarelLup Ionut rudarel Data 4 aprilie 2013 13:05:57
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <stdio.h>
#include <string.h>

#define MAXN 1024
#define max(a,b) ((a) > (b) ? (a) : (b))

int N, M, cnt, A[MAXN], Mic[MAXN], Mare[MAXN];

int zero, nr, mon;

void solve(void)
{
    int i;

    for(i = 0; i < N; i++)
    {
        if(Mic[i] == 0 && Mare[i] == 0)
        {
            if(zero == 1)
                nr++, mon = i;
            continue ;
        }
        if(Mic[i] && Mare[i])
            continue ;
        if(max(Mic[i], Mare[i]) == cnt)
            nr++, mon = i;
    }
}

void read_data(void)
{
    int i, j, k, type;

    zero = 1;
    
    scanf("%d %d\n", &N, &M);

    for(i = 1; i <= M; i++)
    {
        scanf("%d ", &k);
        for(j = 0; j < (k<<1); j++)
            scanf("%d ", &A[j]), A[j]--;
        scanf("%d\n", &type);
        if(type == 0)
            for(j = 0; j < (k<<1); j++)
                Mic[A[j]]++, Mare[A[j]]++;
        if(type == 1)
        {
            cnt++;
            for(zero = j = 0; j < k; j++)
                Mare[A[j]]++;
            for(j = k; j < (k<<1); j++)
                Mic[A[j]]++;
        }
        if(type == 2)
        {
            cnt++;
            for(zero = j = 0; j < k; j++)
                Mic[A[j]]++;
            for(j = k; j < (k<<1); j++)
                Mare[A[j]]++;
        }
    }
}

void write_data(void)
{
    if(nr == 1)
        printf("%d\n", mon+1);
    else
        printf("0\n");
}

int main(void)
{
    freopen("balanta.in", "rt", stdin);
    freopen("balanta.out", "wt", stdout);

    read_data();
    solve();
    write_data();

    return 0;
}