Pagini recente » Cod sursa (job #226154) | Cod sursa (job #3286826) | Cod sursa (job #1472256) | Cod sursa (job #2240319) | Cod sursa (job #2627958)
///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+1LL*step*(mod-1))%mod;
}
int getPosition(int x){
for(int step=0;step<mod;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;
}