Cod sursa(job #2733085)

Utilizator mentolnothingmoreNegrut Maria Daniela mentolnothingmore Data 29 martie 2021 20:57:58
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.74 kb
#include <fstream>
#include <bits/stdc++.h>
#include <cstring>
#include <stack>
#include <vector>

using namespace std;

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

int prim = 786433; // https://planetmath.org/goodhashtableprimes
int N, op, x;
vector <int> H[786433]; // [0] -> lista cu elem % prim = 0 ...

void add_number(int x, int bucket)
{
    bool is_already = false;
    for (int i = 0; i < H[bucket].size(); ++i)
    {
        if (H[bucket][i] == x)
        {
            is_already = true;
            break;
        }
    }
    if (is_already == false)
    {
        H[bucket].push_back(x);
    }
}

void delete_number(int x, int bucket)
{
    for (int i = 0; i < H[bucket].size(); ++i)
    {
        if (H[bucket][i] == x)
        {
            swap(H[bucket][H[bucket].size() - 1], H[bucket][i]);
            H[bucket].pop_back();
            break;
        }
    }
}

bool check(int x, int bucket)
{
    for (int i = 0; i < H[bucket].size(); ++i)
    {
        if (H[bucket][i] == x)
        {
            return 1;
        }
    }
    return 0;
}

int main()
{
    fin >> N;
    for (int i = 0; i < N; ++i)
    {
        fin >> op;
        fin >> x;
        switch (op)
        {
        case 1:
            {
                int bucket = x % prim;
                add_number(x, bucket);
                break;
            }

        case 2:
            {
                int bucket = x % prim;
                delete_number(x, bucket);
                break;
            }
        case 3:
            {
                int bucket = x % prim;
                fout << check(x, bucket) << "\n";
                break;
            }
        }
    }
    return 0;
}