Cod sursa(job #1190784)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 25 mai 2014 17:28:44
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include<cstdio>
#include<vector>

using namespace std;

class Hash
{
    int MOD;
    vector<vector<int> > H;

public:
    Hash(int);
    void insert(int);
    void erase(int);
    int find(int);
};

Hash::Hash(int _MOD)
{
    MOD = _MOD;
    H.resize(MOD+5);
}

void Hash::insert(int x)
{
    int r = x%MOD;
    vector<int>::iterator it;
    for(it = H[r].begin(); it != H[r].end(); it++)
        if(*it == x) return;
    H[r].push_back(x);
}

void Hash::erase(int x)
{
    int r = x%MOD;
    vector<int>::iterator it;
    for(it = H[r].begin(); it != H[r].end(); it++)
        if(*it == x)
        {
            swap(*it,H[r].back());
            H[r].pop_back();
            return;
        }
}

int Hash::find(int x)
{
    int r = x%MOD;
    vector<int>::iterator it;
    for(it = H[r].begin(); it != H[r].end(); it++)
        if(*it == x) return 1;
    return 0;
}

void Read(),Solve();

int N;
Hash H(100003);

int main()
{
    Read();
    Solve();

    return 0;
}

void Read()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);

    scanf("%d",&N);
}

void Solve()
{
    int t,x;

    for(; N; --N)
    {
        scanf("%d%d",&t,&x);
        if(t == 1) H.insert(x);
        else if(t == 2) H.erase(x);
        else printf("%d\n",H.find(x));
    }
}