Cod sursa(job #1772918)

Utilizator GinguIonutGinguIonut GinguIonut Data 7 octombrie 2016 11:21:31
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <fstream>
#include <vector>

#define nMax 1025

using namespace std;

ifstream fin("balanta.in");
ofstream fout("balanta.out");

int n, m;
bool Small[nMax], Big[nMax], A[nMax], B[nMax];

void read()
{
    int val, nrM, result;
    fin>>n>>m;

    for(int i=1; i<=n; i++)
        Big[i]=Small[i]=1;

    for(int i=1; i<=m; i++)
    {
        fin>>nrM;

        for(int j=1; j<=nrM; j++)
        {
            fin>>val;
            A[val]=1;
        }

        for(int j=1; j<=nrM; j++)
        {
            fin>>val;
            B[val]=1;
        }

        fin>>result;
        if(result==0)
        {
            for(int i=1; i<=n; i++)
            {
                if(A[i] || B[i])
                    Big[i]=Small[i]=0;
                A[i]=B[i]=0;
            }
            continue;
        }
        if(result==1)
        {
            for(int i=1; i<=n; i++)
            {
                Big[i]=(Big[i] && A[i]);
                Small[i]=(Small[i] && B[i]);
                A[i]=B[i]=0;
            }
            continue;
        }
        for(int i=1; i<=n; i++)
        {
            Big[i]=(Big[i] && B[i]);
            Small[i]=(Small[i] && A[i]);
            A[i]=B[i]=0;
        }
    }
}

void write()
{
    int nrBig=0, nrSmall=0, solBig, solSmall;

    for(int i=1; i<=n; i++)
    {
        if(Big[i])
        {
            nrBig++;
            solBig=i;
        }
        if(Small[i])
        {
            nrSmall++;
            solSmall=i;
        }
    }

    if(nrBig==1 && nrSmall==0)
    {
        fout<<solBig;
        return;
    }
    if(nrBig==0 && nrSmall==1)
    {
        fout<<solSmall;
        return;
    }
    fout<<0;
}

int main()
{
    read();
    write();
}