Cod sursa(job #2546943)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 14 februarie 2020 18:57:36
Problema Balanta Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.77 kb
#include <bits/stdc++.h>
#define DIM 1030
using namespace std;
ifstream fin("balanta.in");
ofstream fout("balanta.out");
int n,m,i,j,k,r,x;
bitset<DIM> g,u,st,dr;
int main() {
    fin>>n>>m;
    for (i=1;i<=n;i++)
        u[i]=g[i]=1;
    while (m--) {
        st.reset(), dr.reset();
        fin>>k;
        for (i=1;i<=k;i++) {
            fin>>x;
            st[x]=1;
        }
        for (i=1;i<=k;i++) {
            fin>>x;
            dr[x]=1;
        }
        fin>>r;
        if (r==0) {
            for (i=1;i<=n;i++)
                if (st[i]||dr[i]) //daca talerele sunt egale, monedele nu pot fi
                    u[i]=g[i]=0;  //nici grele, nici usoare
        }
        else if (r==1) {
            for (i=1;i<=n;i++) {
                if (st[i])
                    u[i]=0;
                if (dr[i])
                    g[i]=0;
                if (!(st[i]||dr[i])) //daca nu au fost cantarite, inseamna ca moneda diferita
                    u[i]=g[i]=0;     //este in cele cantarite
            }
        }
        else {
            for (i=1;i<=n;i++) {
                if (st[i])
                    g[i]=0;
                if (dr[i])
                    u[i]=0;
                if (!(st[i]||dr[i])) //daca nu au fost cantarite, inseamna ca moneda diferita
                    u[i]=g[i]=0;     //este in cele cantarite
            }
        }
    }
    if (u.count()==1&&g.count()==0) {
        for (i=1;i<=n;i++)
            if (u[i]==1) {
                fout<<i;
                return 0;
            }
    }
    else if (u.count()==0&&g.count()==1) {
        for (i=1;i<=n;i++)
            if (g[i]==1) {
                fout<<i;
                return 0;
            }
    }
    else
        fout<<"-1";
    return 0;
}