Cod sursa(job #1799081)

Utilizator vazanIonescu Victor Razvan vazan Data 5 noiembrie 2016 18:57:22
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.94 kb
#include<cstdio>
#include<vector>
using namespace std;
#define HASH_TABLE_CONST 666013
class HASH{
public:
    HASH();
    void tip1(int x);
    void tip2(int x);
    bool tip3(int x);
private:
    int *hash_table;
    vector< pair<int, int> > elem;
};

void HASH::tip1(int x){
    int rem=x%HASH_TABLE_CONST, elem_poz;
    elem_poz=elem.size();
    elem.push_back(make_pair(0, x));
   // printf("%d%d", elem[1].first, elem[1].second);
    if(hash_table[rem]==0)
        hash_table[rem]=elem_poz;
    else{
        int p=hash_table[rem], prev;
        while(p){
            prev=p;
            if(elem[p].second==x) return;
            p=elem[p].first;
        }
        elem[prev].first=elem_poz;
    }
}

void HASH::tip2(int x){
    int rem=x%HASH_TABLE_CONST;
    if(hash_table[rem]==0)
        return;
    else{
        int p=hash_table[rem], prev;
        if(elem[p].second==x)
            hash_table[rem]=elem[p].first;
        else
            while(p){
                if(elem[p].second==x){
                    elem[prev].first=elem[p].first;
                    return;
                }
                prev=p;
                p=elem[p].first;
            }
    }
}

bool HASH::tip3(int x)
{
    int rem=x%HASH_TABLE_CONST, p;
    p=hash_table[rem];
    //printf("///%d///\n", elem[p].second);
    while(p){
        if(elem[p].second==x)
            return 1;
        p=elem[p].first;
    }
    return 0;
}

HASH::HASH(){
    hash_table=new int[HASH_TABLE_CONST];
    elem.push_back(make_pair(0, 0));
}

int main(){
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);
    HASH myhesh;
    int n, t, e;
    scanf("%d", &n);
    for(int i=1; i<=n; i++){
        scanf("%d%d", &t, &e);
        switch(t){
        case 1: myhesh.tip1(e);break;
        case 2: myhesh.tip2(e);break;
        case 3: printf("%d\n", myhesh.tip3(e));
        }
    }
    return 0;
}