Cod sursa(job #2627962)

Utilizator Bodo171Bogdan Pop Bodo171 Data 13 iunie 2020 16:26:50
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
///open addressing
#include <bits/stdc++.h>

using namespace std;
const int EMPTY=-1;
const int DELETED=-2;
class Hash{
private:
    vector<int> elements;
    int mod;
    int hashNumber(int x,int step){
        return (x+step)%mod;
    }
    int getPosition(int x){
        for(int step=0;step<mod&&elements[hashNumber(x,step)]!=EMPTY;step++)
            if(elements[hashNumber(x,step)]==x)
                 return hashNumber(x,step);
        return -1;
    }
public:
    Hash(int Size) : elements(Size,EMPTY){
        mod=Size;
    }
    void Add(int x){
        int pos=getPosition(x);
        if(pos!=-1) return;
        for(int step=0;step<mod;step++)
            if(elements[hashNumber(x,step)]==DELETED||elements[hashNumber(x,step)]==EMPTY){
                elements[hashNumber(x,step)]=x;
                return;
            }
    }
    void Delete(int x){
        int pos=getPosition(x);
        if(pos==-1) return;
        elements[pos]=DELETED;
    }
    int Find(int x){
        return (getPosition(x)>=0);
    }
};
int main(){
    ifstream f("hashuri.in");
    ofstream g("hashuri.out");
    Hash H(1000*1000+7);
    int n;
    f>>n;
    for(int i=1;i<=n;i++){
        int type,x;
        f>>type>>x;
        switch (type){
            case 1:{
                H.Add(x);
                break;
            }
            case 2:{
                H.Delete(x);
                break;
            }
            case 3:{
                g<<H.Find(x)<<'\n';
                break;
            }
        }
    }
    return 0;
}