Cod sursa(job #795031)

Utilizator andunhillMacarescu Sebastian andunhill Data 7 octombrie 2012 15:14:51
Problema Balanta Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include<fstream>
#include<iostream>
#include<ctime>
using namespace std;

clock_t start=clock();

ifstream f("balanta.in");
ofstream g("balanta.out");

int N, M;
int sh[1030];
int sl[1030];
int A[1030], B[1030];

void set(int op, int n, int *v, int *a, int *b)
{   int i;
    int aux[1030];
    if(a)
    {   //cout<<"in a op "<<op<<" .... ";
        if(op == 0)
        {   //cout<<"in\n";
            for(i = 1; i <= n; i++)
                if(v[a[i]])
                    v[a[i]] = 0, v[0]--;
        }
        else
        {   //cout<<"in\n";
            for(i = 0; i <= N; i++) aux[i] = v[i], v[i] = 0;

            v[0] = 0;
            for(i = 1; i <= n; i++)
                if(aux[a[i]] == 1) v[a[i]] = 1, v[0]++;
        }
    }
    if(b)
    {   //cout<<"in a op "<<op<<" .... ";
        if(op == 0)
        {   //cout<<"in\n";
            for(i = 1; i <= n; i++)
                if(v[b[i]])
                    v[b[i]] = 0, v[0]--;
        }
        else
        {   //cout<<"in\n";
            for(i = 0; i <= N; i++) aux[i] = v[i], v[i] = 0;

            v[0] = 0;
            for(i = 1; i <= n; i++)
                if(aux[b[i]] == 1) v[b[i]] = 1, v[0]++;
        }
    }
}

int main()
{   int i, j, k, v;
    int ans = 0;

    f>>N>>M;
    for(i = 1; i <= N; i++) sh[++sh[0]] = sl[++sl[0]] = 1;
    for(i = 1; i <= M; i++)
    {   f>>k;
        for(j = 1; j <= k; j++)
            f>>A[j];
        for(j = 1; j <= k; j++)
            f>>B[j];
        f>>v;

        if(v == 0)
        {   set(0, k, sh, A, B);
            set(0, k, sl, A, B);
        }
        else
        {   if(v == 1)
            {   set(1, k, sh, A, NULL);
                set(1, k, sl, NULL, B);
            }
            else
            {   set(1, k, sh, NULL, B);
                set(1, k, sl, A, NULL);
            }
        }
    }
    if(sh[0] == 1 && sl[0] == 0)
        for(j = 1; j <= N; j++) if(sh[j] == 1) ans = j;
    else if(sh[0] == 0 && sl[0] == 1)
        for(j = 1; j <= N; j++) if(sl[j] == 1) ans = j;

    g<<ans;
    cout << 1.0*(clock()-start)/(1.0*CLOCKS_PER_SEC) << '\n';

    f.close();
    g.close();
    return 0;
}