Cod sursa(job #2617702)

Utilizator hirneagabrielHirnea Gabriel hirneagabriel Data 22 mai 2020 17:12:23
Problema Hashuri Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.64 kb
#include <iostream>
#include <list>
#include <fstream>


using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
class Hash
{
    int nr;
    list<long long>* tabel;
public:
    Hash(int);
    void Insert(long long );
    void Delete(long long );
    int afis(long long);
    list<long long>::iterator Find(long long);
    int hashFuction(long long x)
    {
        return x % nr;
    }
};
Hash::Hash(int x)
{
    nr = x;
    tabel = new list<long long>[nr];
}

void Hash::Insert(long long x)
{
    long long i = hashFuction(x);
    if(Find(x)==tabel[i].end())
        tabel[i].push_back(x);
}

void Hash::Delete(long long x)
{
    long long i = hashFuction(x);
    list <long long>::iterator j= Find(x);
    if(j!=tabel[i].end())
        tabel[i].erase(j);
}

list<long long>::iterator Hash::Find(long long x)
{
    long long i = hashFuction(x);
    list <long long>::iterator j;
    for (j = tabel[i].begin(); j != tabel[i].end(); i++)
        if (*j == x)
            return j;
    return tabel[i].end();
}
int Hash::afis(long long x)
{
    long long i = hashFuction(x);
    if (Find(x) == tabel[i].end())
        return 0;
    return 1;
}
int main() {
    int N;
    long long x,y;
    fin >> N;
    Hash ob(666013);
    while (N)
    {
        fin >> x;
        if (x == 1)
        {
            fin >> y;
            ob.Insert(y);
        }
        if (x == 2)
        {
            fin >> y;
            ob.Delete(y);
        }
        if (x == 3)
        {
            fin >> y;
            fout << ob.afis(y) << "\n";
        }
        N--;
    }
    return 0;
}