Cod sursa(job #1503730)

Utilizator cordun_cristinaCristina Maria Cordun cordun_cristina Data 16 octombrie 2015 20:26:48
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.86 kb
/*Hashuri
Fie o multime de numere naturale initial vida. Asupra acestei multimi se efectueaza operatii de urmatoarele tipuri:

operatia de tipul 1: se adauga elementul x la multime (unde x este un parametru al operatiei). Daca x este deja in multime,
 atunci aceasta ramane neschimbata.
operatia de tipul 2: se sterge elementul x, daca acesta este deja in multime. In caz contrar, multimea ramane neschimbata.
operatia de tipul 3: returneaza 1 daca si numai daca x este in multime, iar in caz contrar returneaza 0.
Date de intrare
Fişierul de intrare hashuri.in contine pe prima linie numarul N de operatii efectuate. Fiecare din urmatoarele N linii
 contine o pereche de numere naturale (op x), unde op este numarul operatiei care se efectueaza (de la 1 la 3), iar x
 este parametrul operatiei.

Date de ieşire
Fişierul de ieşire hashuri.out va contine un numar de linii egal cu numarul de operatii de tipul 3 din fisierul de intrare.
 Pe fiecare linie se va afla raspunsul returnat de operatia corespunzatoare.

Restricţii
3 ≤ N ≤ 1.000.000
Fiecare operatie are un parametru numar natural din intervalul [1, 2.000.000.000]*/
#include <vector>
#include <fstream>

using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");

const int prim=666013;

int n,val,com,loc;

vector <int> a[prim];

int verifica()
{
    for(int i=0;i<(int)a[loc].size();i++)
        if(a[loc][i]==val) return i;
    return -1;
}

void adauga()
{
    if(verifica()==-1) a[loc].push_back(val);
}

void sterge()
{
    int i=verifica();
    if(i!=-1) a[loc].erase(a[loc].begin()+i);
}

int main()
{
    f>>n;
    for(int i=0;i<n;i++)
    {
        f>>com>>val;
        loc=val%prim;
        if(com==1) adauga();
        if(com==2) sterge();
        if(com==3)
        {
            g<<(verifica()!=-1)<<'\n';
        }
    }
    return 0;
}