Pagini recente » Cod sursa (job #1390233) | Cod sursa (job #1839398) | Cod sursa (job #1560692) | Cod sursa (job #618386)
Cod sursa(job #618386)
/*************************************
*Chaining / functie hash cu inmultire*
*************************************/
#include <fstream>
#include <cstring>
#include <cmath>
#define HSize 65535
#define MOD 65535
using namespace std;
ifstream in;
ofstream out;
struct hash
{
int nod;
hash *link;
}*H[HSize];
double A;
inline void calculateA()
{
A=(sqrt(5)-1)/2;
}
inline int convert(int val)
{
double ret=val*A-int(val*A);
ret*=MOD;
return ret;
}
inline int find(int val)
{
for(hash *h=H[convert(val)];h;h=h->link)
if(h->nod==val) return 1;
return 0;
}
inline void ins(int val)
{
hash *h=new hash;
h->nod=val;
val=convert(val);
h->link=H[val];
H[val]=h;
}
inline void del(int val)
{
int pos=convert(val);
for(hash *aux=NULL,*h=H[pos];h;aux=h,h=h->link)
if(h->nod==val)
{
if(aux) aux->link=h->link;
else H[pos]=h->link;
delete h;
return;
}
}
int main()
{
int N,x,y,ok;
calculateA();
in.open("hashuri.in");
out.open("hashuri.out");
in>>N;
for(;N--;)
{
in>>x>>y;
ok=find(y);
if(x==1&&!ok) ins(y);
else
if(x==2&&ok) del(y);
else
if(x==3) out<<ok<<'\n';
}
in.close();
out.close();
return 0;
}