Pagini recente » Cod sursa (job #419494) | Cod sursa (job #148457) | Cod sursa (job #294116) | Cod sursa (job #3279412) | Cod sursa (job #710647)
Cod sursa(job #710647)
#include <cstdio>
using namespace std;
#define DEL -1
#define NIL 0
class hash_table {
int hash_size,hash_used;
int *T;
int h1 (int);
int h2 (int);
int h (int,int);
public:
hash_table () {
int i;
this->hash_size=1;
this->T=new int[this->hash_size];
for (i=0; i<this->hash_size; ++i)
this->T[i]=NIL;
}
void rehash ();
void insert (int);
void erase (int);
int find (int);
};
int hash_table :: h1 (int key) {
return key%this->hash_size;
}
int hash_table :: h2 (int key) {
return ((key<<1)|1)%this->hash_size;
}
int hash_table :: h (int key,int poz) {
return (this->h1 (key)+poz*this->h2 (key))%this->hash_size;
}
void hash_table :: insert (int key) {
int i,j,is;
is=this->find (key);
if (is)
return ;
for (i=0; i<this->hash_size; ++i) {
j=this->h (key,i);
if (this->T[j]==NIL || this->T[j]==DEL) {
this->T[j]=key;
if (++hash_used==hash_size)
this->rehash ();
return ;
}
}
}
void hash_table :: erase (int key) {
int is;
is=this->find (key);
if (!is)
return ;
--this->hash_used;
this->T[is]=DEL;
}
int hash_table :: find (int key) {
int i,j;
for (i=0; i<this->hash_size; ++i) {
j=this->h (key,i);
if (this->T[j]==key)
return j;
if (this->T[j]==NIL)
return 0;
}
return 0;
}
void hash_table :: rehash () {
int *tmp;
int i,N;
N=0;
tmp=new int[this->hash_size];
for (i=0; i<this->hash_size; ++i)
if (this->T[i]!=NIL && this->T[i]!=DEL)
tmp[N++]=this->T[i];
delete[] this->T;
this->hash_size<<=1;
this->T=new int[this->hash_size];
for (i=0; i<this->hash_size; ++i)
this->T[i]=NIL;
for (i=0; i<N; ++i)
this->insert (tmp[i]);
delete[] tmp;
}
//END OF CLASS DECLARATION
hash_table Hash;
int T;
int main () {
freopen ("hashuri.in","r",stdin);
freopen ("hashuri.out","w",stdout);
int i,x,tip;
scanf ("%d",&T);
for (i=1; i<=T; ++i) {
scanf ("%d%d",&tip,&x);
if (tip==1)
Hash.insert (x);
if (tip==2)
Hash.erase (x);
if (tip==3) {
if (Hash.find (x))
printf ("1\n");
else
printf ("0\n");
}
}
return 0;
}