Cod sursa(job #2746946)

Utilizator truscalucaLuca Trusca truscaluca Data 28 aprilie 2021 18:22:13
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <iostream>
#include <vector>

using namespace std;

const int mod = 666013;

vector<int> v[mod];
int q, cod, x;

bool eInLista(int nr) {
    int hash = nr % mod;

    // Verifica daca nr e in lista sa de hash
    for (auto val : v[hash]) {
        if (val == nr) {
            return true;
        }
    }

    // Nicio valoare nu a dat return true mai sus, deci nr nu este in lista
    return false;
}

int main() {
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);

    // Input rapid
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    // Citeste datele
    cin >> q;
    for (int i = 0; i < q; i++) {
        cin >> cod >> x;

        // Calculeaza hash-ul lui x folosind un numar prim
        int xHash = x % mod;

        if (cod == 1) {
            // Cod 1 = adauga x (daca nu e deja in lista)
            if (!eInLista(x)) {
                v[xHash].push_back(x);
            }
        } else if (cod == 2) {
            // Cod 2 = sterge x (daca e in lista)

            // Cauta iteratorul corespunzator elementului cautat, deoarece erase accepta numai
            // iterator, nu si valoare direct
            for (auto it = v[xHash].begin(); it != v[xHash].end(); it++) {
                if (x == *it) {
                    // Numarul a fost gasit, asa ca sterge-l si opreste-te
                    v[xHash].erase(it);
                    break;
                }
            }
        } else if (cod == 3) {
            // Cod 3 = afiseaza 1 daca x e in lista, 0 altfel
            cout << (eInLista(x) ? "1" : "0") << "\n";
        }
    }
    
    return 0;
}