Cod sursa(job #1205223)

Utilizator cristian.caldareaCaldarea Cristian Daniel cristian.caldarea Data 5 iulie 2014 18:28:22
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>

using namespace std;

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

int sol;
int usor[1100], greu[1100], M1[1100], M2[1100];

void discard(int x[], int N);
void keep(int x[], int where[], int cnt, int N);
int num(int x[], int N);

int main()
{
    int N, M;

    freopen("balanta.in", "r", stdin);
    freopen("balanta.out", "w", stdout);

    f >> N >> M;
    for (int i = 1; i <= N; i ++)
        usor[i] = greu[i] = 1;

    for (int i = 1; i <= M; i ++)
    {
        int x, y;

        f >> x;
        for (int j = 1; j <= x; j ++)
            f >> M1[j];
        for (int j = 1; j <= x; j ++)
            f >> M2[j];
        f >> y;

        if (y == 0)
            discard(M1, x), discard(M2, x);
        if (y == 1)
            keep(M1, greu, x, N), keep(M2, usor, x, N);
        if (y == 2)
            keep(M1, usor, x, N), keep(M2, greu, x, N);
    }

    if (num(greu, N) + num(usor, N) == 1)
        g << sol;
    else
        g << 0;
    return 0;
}

void discard(int x[], int N)
{

    for (int i = 1; i <= N; i ++)
        usor[x[i]] = greu[x[i]] = 0;
}

void keep(int x[], int where[], int cnt, int N)
{


    for (int i = 1; i <= cnt; i ++)
        if (where[x[i]] == 1)
            where[x[i]] = -1;
    for (int i = 1; i <= N; i ++)
        if (where[i] == -1)
            where[i] = 1;
        else
            where[i] = 0;
}

int num(int x[], int N)
{
    int tot = 0;

    for (int i = 1; i <= N; i ++)
        if (x[i])
            tot ++, sol = i;
    return tot;
}