Cod sursa(job #2236213)

Utilizator GiihuoTihufiNeacsu Stefan GiihuoTihufi Data 28 august 2018 17:16:38
Problema Balanta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <bits/stdc++.h>

using namespace std;

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

typedef vector<int> mult;

mult operator *(mult X,mult Y)
{
    mult Z;
    int j=0;
    for(int i=0;i<X.size();i++)
    {
        if(j==Y.size()) break;
        while(X[i]>Y[j]) j++;
        if(X[i]==Y[j]) Z.push_back(Y[j++]);
    }
    return Z;
}

mult operator +(mult X,mult Y)
{
    mult Z;
    map<int,bool> fr;
    for(int i=0;i<X.size();i++) fr[X[i]]=1;
    for(int i=0;i<Y.size();i++) fr[Y[i]]=1;
    for(auto i:fr)
        Z.push_back(i.first);
    return Z;
}

mult operator -(mult X,mult Y)
{
    mult Z;
    mult P=X*Y;
    int j=0;
    for(int i=0;i<X.size();i++)
    {
        if(j==P.size()) break;
        if(X[i]==P[j]) j++;
        else Z.push_back(X[i]);
    }
    for(int i=P.size();i<X.size();i++)
        Z.push_back(X[i]);
    return Z;
}

int main()
{
    int N,M;
    f>>N>>M;
    vector<int> H(N),L(N);
    for(int i=0;i<N;i++)
        H[i]=L[i]=i+1;
    for(;M--;)
    {
        int K,r;
        f>>K;
        vector<int> A(K),B(K);
        for(auto &i:A) f>>i;
        for(auto &i:B) f>>i;
        f>>r;
        switch(r)
        {
        case 0:
            H=H-(A+B),L=L-(A+B);
            break;
        case 1:
            H=H*A,L=L*B;
            break;
        case 2:
            H=H*B,L=L*A;
            break;
        }
    }
    if(L.size()==1 && H.size()==0) g<<L[0];
    else
    {
        if(L.size()==0 && H.size()==1) g<<H[0];
        else g<<0;
    }
    return 0;
}