Pagini recente » Cod sursa (job #959322) | Cod sursa (job #2788054) | Cod sursa (job #2120170) | Cod sursa (job #873311) | Cod sursa (job #953174)
Cod sursa(job #953174)
#include<fstream>
using namespace std;
const int MAXN=100001;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
typedef struct list_node
{
int value;
list_node *next;
void init()
{
value=0;
next=NULL;
}
}hash_node;
hash_node *h[MAXN];
int n,k;
int hash_func(int x)
{
static const double y=0.6180339887;
static const int m=666013;
int key=int((m*(x*y-int(x*y))))%MAXN;
return key;
}
void hash_insert(int x)
{
int key=hash_func(x);
hash_node *curr;
if (h[key]==NULL)
{
h[key]=new hash_node;
h[key]->init();
}
curr=new hash_node; curr->init();
curr->value=x;
curr->next=h[key]->next;
h[key]->next=curr;
}
void hash_delete(int x)
{
int key=hash_func(x);
hash_node *curr=NULL,*aux=NULL;
if (h[key]==NULL)
return;
for (curr=h[key]->next,aux=h[key];curr!=NULL && (curr->value!=x);curr=curr->next,aux=aux->next);
if (curr!=NULL)
{
aux->next=curr->next;
delete curr;
}
}
int hash_search(int x)
{
int key=hash_func(x);
hash_node *curr;
for (curr=h[key];curr!=NULL && (curr->value!=x);curr=curr->next);
return (curr!=NULL);
}
int main()
{
int op,x;
fin>>n;
for (k=1;k<=n;++k)
{
fin>>op>>x;
switch(op)
{
case 1:
hash_insert(x);
break;
case 2:
hash_delete(x);
break;
case 3:
fout<<hash_search(x)<<'\n';
break;
}
}
fin.close();
fout.close();
return 0;
}