Cod sursa(job #3125565)

Utilizator DevCrutCorolevschi Mihai DevCrut Data 3 mai 2023 18:52:48
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,f16c,fma,sse3,ssse3,sse4.1,sse4.2") 

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

class Hashtable {
private:
    vector<int> elems[1000000];
    const int primVal = 99991;
public:
    
    void add(int elem) {
        int key = elem % this->primVal;
        for (int i = 0; i < this->elems[key].size(); ++i) {
            if (this->elems[key][i] == elem) {
                return;
            }
        }
        this->elems[key].push_back(elem);
    }

    void remove(int elem) {
        int key = elem % this->primVal;
        for (int i = 0; i < this->elems[key].size(); ++i) {
            if (this->elems[key][i] == elem) {
                this->elems[key].erase(this->elems[key].begin() + i);
                //cout << "removed " << elem << '\n';
                break;
            }
        }
    }

    bool find(int elem) {
        int key = elem % this->primVal;
        for (int i = 0; i < this->elems[key].size(); ++i) {
            if (this->elems[key][i] == elem) {
                return true;
            }
        }
        return false;
    }
};

ifstream myIn("hashuri.in");
ofstream myOut("hashuri.out");
Hashtable hashtable;

int main() {
    int count, oper, nr;
    myIn >> count;
    for (int i = 0; i < count; ++i) {
        myIn >> oper >> nr;
        if (oper == 1) {
            hashtable.add(nr);
        }
        else if (oper == 2) {
            hashtable.remove(nr);
        }
        else {
            myOut << hashtable.find(nr) << '\n';
        }
    }
}