Pagini recente » Cod sursa (job #93720) | Cod sursa (job #3232468) | Cod sursa (job #257100) | Cod sursa (job #475306) | Cod sursa (job #729166)
Cod sursa(job #729166)
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
const int m=666667;
class hash{
int *T;
int hash_size;
public:
hash(int size){
hash_size=size;
T=new int [m];
memset(T,0,sizeof(T)*m);
}
int h(int,int);
int cauta(int k);
void insert(int k);
void sterge(int k);
};
int hash::h(int k,int i){
return (k%m+i*(1+k%(m-2)))%m;
}
int hash::cauta(int k){
int i,j;
for(i=0;i<m;i++){
j=h(k,i);
if(T[j]==0)
return -1;
if(T[j]==k)
return j;
}
}
void hash::insert(int k){
int j,i;
if(cauta(k)==-1)
for(i=0;i<m;i++){
j=h(k,i);
if(T[j]<=0){
T[j]=k;
i=m-1;
}
}
}
void hash::sterge(int k){
int j;
if(cauta(k)!=-1){
j=cauta(k);
T[j]=-1;
}
}
int main(){
ifstream f("hashuri.in");
ofstream g("hashuri.out");
hash ob(m);
int x,n;
short int op;
f>>n;
for(int i=1;i<=n;i++){
f>>op>>x;
if(op==1)
ob.insert(x);
if(op==2)
ob.sterge(x);
if(op==3){
if(ob.cauta(x)!=-1)
g<<"1\n";
else
g<<"0\n";
}
}
return 0;
}