Cod sursa(job #2158429)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 10 martie 2018 12:54:15
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <iostream>
#include <fstream>
#include <vector>
#define MAXN 1030

using namespace std;

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

//marchez cu -1 neaparitia 0 -> imposibilitatea >= 1 -> posibiliatatea
int v[MAXN],semn[MAXN],n,q,k,directie;
vector<int>retine_numere;

void init(){
    for(int i = 0; i < MAXN; i++){
        v[i] = -1;
        semn[i] = -1;
    }
}
void go(int numar,int i){
    if(semn[numar] == -1 || semn[numar] == directie)
        semn[numar] = directie;
    else
        v[numar] = 0;
}
void afis(){
    for(int i = 1; i <= n; i++)
        cerr<<i<<" : "<<v[i]<<" "<<semn[i]<<endl;
    cerr<<endl<<"============"<<endl;
}
void rez(int start,int finish,int directie){
    int numar;
    if(directie != 0){
        for(int i = start; i < finish; i++){
            numar = retine_numere[i];
            if(v[numar] == -1){
                v[numar] = 1;
                go(numar,i);
            }else if(v[numar] > 0){
                v[numar]++;
                go(numar,i);
            }
        }
    }else{
        for(int i = 0; i < 2*k; i++){
            numar = retine_numere[i];
            v[numar] = 0;
        }
    }
}
void change_direction(){
    if(directie == 1)
        directie = 2;
    else
        directie = 1;
}

int main()
{
    init();
    in>>n>>q;
    int nr;
    for(int i = 1; i <= q; i++){
        in>>k;
        retine_numere.clear();
        for(int j = 0; j < 2*k; j++){
            in>>nr;
            retine_numere.push_back(nr);
        }
        in>>directie;
        rez(0,k,directie);
        change_direction();
        rez(k,2*k,directie);
    }
    int maxim = 0,ans;
    bool ok = true;
    for(int i = 1; i <= n; i++){
        if(v[i] > maxim){
            maxim = v[i];
            ok = true;
            ans = i;
        }else if(v[i] == maxim)
            ok = false;
    }
    if(ok)
        out<<ans;
    else
        out<<0;
    return 0;
}