Cod sursa(job #1768990)

Utilizator giotoPopescu Ioan gioto Data 1 octombrie 2016 19:52:29
Problema Balanta Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.36 kb
#include <cstdio>
#include <cstring>
using namespace std;

int r,k,n,m,a[1026],b[1026],f[1026],f1[1026];
void mymemset(){
    for(int i = 0; i <= n; ++i)
        { f[i] = f1[i]; f1[i] = 0;}
}
int main()
{
    freopen("balanta.in", "r", stdin);
    freopen("balanta.out", "w", stdout);
    scanf("%d%d", &n, &m);
    // presupun ca moneda este mai grea
    int NR = 0, t1 = 1;
    do{
        scanf("%d", &k);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &a[i]);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &b[i]);
        scanf("%d", &r);
        if(r==0){
            for(int i = 1; i <= k; ++i)
                f[b[i]] = -1;
            for(int i = 1; i <= k; ++i)
                f[a[i]] = -1;
        }
        if(r==1){
            NR = 0;
            for(int i = 1; i <= k; ++i)
                if(f[a[i]] == 0)++NR, f[a[i]] = 1;
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
        }
        if(r==2){
            NR=0;
            for(int i = 1; i <= k; ++i)
                if(f[b[i]] == 0)++NR, f[b[i]] = 1;
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
        }
        ++t1;
    }while(r == 0 && t1 <= m);
    if(t1 > m) {printf("0");return 0;}
    for(int t = t1; t <= m; ++t){
        scanf("%d", &k);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &a[i]);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &b[i]);
        scanf("%d", &r);
        if(r==0){
            for(int i = 1; i <= k; ++i)
                if(f[a[i]] == 1)
                    --NR, f[a[i]] = 0;
            for(int i = 1; i <= k; ++i)
                if(f[b[i]] == 1)
                    --NR, f[b[i]] = 0;
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
            continue ;
        }
        if(r==1){
            NR = 0;
            for(int i = 1; i <= k; ++i)
                if(f[a[i]] == 1) ++NR, f1[a[i]] = 1;
            mymemset();
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
            continue ;
        }
        NR = 0;
        for(int i = 1; i <= k; ++i)
            if(f[b[i]] == 1) ++NR, f1[b[i]] = 1;
        mymemset();
        if(NR == 1){
            for(int i = 1; i <= n; ++i)
                if(f[i] == 1)
                    {printf("%d", i); return 0;}
        }
    }

    freopen("balanta.in", "r", stdin);
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; ++i)
        f[i] = 0;
    //presupun ca moneda este mai usoara :)
    NR = 0; t1 = 0;
    do{
        scanf("%d", &k);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &a[i]);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &b[i]);
        scanf("%d", &r);
        if(r==0){
            for(int i = 1; i <= k; ++i)
                f[b[i]] = -1;
            for(int i = 1; i <= k; ++i)
                f[a[i]] = -1;
        }
        if(r==2){
            NR = 0;
            for(int i = 1; i <= k; ++i)
                if(f[a[i]]==0)++NR, f[a[i]] = 1;
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
        }
        if(r==1){
            NR = 0;
            for(int i = 1; i <= k; ++i)
                if(f[b[i]]==0)++NR, f[b[i]] = 1;
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
        }
        ++t1;
    }while(r == 0 && t1 <= m);
    if(t1 > m) {printf("0");return 0;}
    for(int t = t1; t <= m; ++t){
        scanf("%d", &k);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &a[i]);
        for(int i = 1; i <= k; ++i)
            scanf("%d", &b[i]);
        scanf("%d", &r);
        if(r==0){
            for(int i = 1; i <= k; ++i)
                if(f[a[i]] == 1)
                    --NR, f[a[i]] = 0;
            for(int i = 1; i <= k; ++i)
                if(f[b[i]] == 1)
                    --NR, f[b[i]] = 0;
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
            continue ;
        }
        if(r==2){
            NR = 0;
            for(int i = 1; i <= k; ++i)
                if(f[a[i]] == 1) ++NR, f1[a[i]] = 1;
            mymemset();
            if(NR == 1){
                for(int i = 1; i <= n; ++i)
                    if(f[i] == 1)
                        {printf("%d", i); return 0;}
            }
            continue ;
        }
        NR = 0;
        for(int i = 1; i <= k; ++i)
            if(f[b[i]] == 1) ++NR, f1[b[i]] = 1;
        mymemset();
        if(NR == 1){
            for(int i = 1; i <= n; ++i)
                if(f[i] == 1)
                    {printf("%d", i); return 0;}
        }
    }printf("0");
    return 0;
}