Cod sursa(job #2906562)

Utilizator utilizator20052022utilizatorr utilizator20052022 Data 26 mai 2022 17:56:38
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.8 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

const int parametruDispersie = 1000007;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

vector<int> h[1000007];


int N;
// 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
// 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.

bool inHash(int value){
    int cod_dispersie = value % parametruDispersie;
    for(auto x: h[cod_dispersie]){if(x == value) return true;}
    return false;
}

void insertInHash(int value)
{
    int cod_dispersie = value % parametruDispersie;
    if(inHash(value) == false) h[cod_dispersie].push_back(value);
}

void removeFromHash(int value){
    int cod_dispersie = value % parametruDispersie;
    for(int i = 0; i < h[cod_dispersie].size(); ++i){
        if(h[cod_dispersie][i] == value){
            h[cod_dispersie].erase(h[cod_dispersie].begin() + i);
            return;
        }
    }
}

int main(){
    int cod, value;
    fin>>N;
    for(int i = 0; i < N; ++i){
        fin>>cod;
        fin>>value;
        if(cod == 1){
            insertInHash(value);
        }
        if(cod == 2){
            removeFromHash(value);
        }
        if(cod == 3){
            if(inHash(value)) fout<<"1\n";
            else fout<<"0\n";
        }
    }
    return 0;
}