Cod sursa(job #2040996)

Utilizator Coroian_DavidCoroian David Coroian_David Data 16 octombrie 2017 19:25:20
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <bits/stdc++.h>

#define MAX_N 1024
#define MAX_M 1024

using namespace std;

FILE *f, *g;

int n, m;

bitset<MAX_N + 1> usor;
bitset<MAX_N + 1> greu;

bitset<MAX_N + 1> a, b;

void readFile()
{
    f = fopen("balanta.in", "r");

    fscanf(f, "%d%d", &n, &m);

    int i;
    for(i = 1; i <= n; i ++)
        greu[i] = usor[i] = 1;

    int k;
    for(i = 1; i <= m; i ++)
    {
        fscanf(f, "%d", &k);

        a &= 0;
        b &= 0;

        int j;
        int nr;
        for(j = 1; j <= k; j ++)
        {
            fscanf(f, "%d", &nr);
            a[nr] = 1;
        }

        for(j = 1; j <= k; j ++)
        {
            fscanf(f, "%d", &nr);
            b[nr] = 1;
        }

        int rez;
        fscanf(f, "%d", &rez);

        if(rez == 0)
        {
            a = ~(a | b);///1 sunt suspecti, 0 liberi
            usor &= a;
            greu &= a;
        }

        if(rez == 1)
        {
            greu &= a;
            usor &= b;
        }

        if(rez == 2)
        {
            greu &= b;
            usor &= a;
        }
    }

    fclose(f);
}

int rez;

void solve()
{
    int aps = 0;
    int i;
    for(i = 1; i <= n; i ++)
    {
        if(usor[i] || greu[i])
        {
            aps ++;

            rez = i;
        }
    }

    if(aps != 1)
        rez = 0;
}

void printFile()
{
    g = fopen("balanta.out", "w");

    fprintf(g, "%d\n", rez);

    fclose(g);
}

int main()
{
    readFile();

    solve();

    printFile();

    return 0;
}