Cod sursa(job #2765045)

Utilizator Teodor_AxinteAxinte Teodor-Ionut Teodor_Axinte Data 24 iulie 2021 16:53:19
Problema Hashuri Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.69 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <map>

using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

class Hash {
private:
    static const int nnmb = 5;
    vector<int> v[nnmb];

public:
    void add_nmb(int);

    void del_nmb(int);

    void display();

    int find_nmb(int);
};

void Hash::add_nmb(int added_number) {
    int key_number = added_number % nnmb, okay = 0;

    for (auto it:v[key_number])
        if (it == added_number)
            okay = 1;
    if (okay)
        return;
    v[key_number].push_back(added_number);
}

void Hash::del_nmb(int deleted_number) {
    int key_number = deleted_number % nnmb, okay = 0;
    for (auto it:v[key_number])
        if (it == deleted_number)
            okay = 1;
    if (!okay)return;

    vector<int>::iterator it = find(v[key_number].begin(), v[key_number].end(), deleted_number);
    v[key_number].erase(it);
}

void Hash::display() {
    for (int i = 0; i < nnmb; i++)
        if (!v[i].empty()) {
            for (vector<int>::iterator it = v[i].begin(); it != v[i].end(); it++)
                cout << (*it) << " ";
            cout << endl;
        }
}

int Hash::find_nmb(int searched_nmb) {
    int key_nmb = searched_nmb % nnmb;
    vector<int>::iterator it = find(v[key_nmb].begin(), v[key_nmb].end(), searched_nmb);
    if (it != v[key_nmb].end())
        return 1;
    return 0;
}

Hash H;
int n, x, op;

int main() {
    fin >> n;
    for (; n != 0; n--) {
        fin >> op >> x;
        if (op == 1)
            H.add_nmb(x);
        else if (op == 2)
            H.del_nmb(x);
        else if (op == 3)
            fout << H.find_nmb(x) << '\n';
    }
    return 0;

}