Mai intai trebuie sa te autentifici.
Cod sursa(job #251769)
Utilizator | Data | 3 februarie 2009 13:02:44 | |
---|---|---|---|
Problema | Hashuri | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.27 kb |
#include <stdio.h>
#define nr 666013
struct hash{
int info;
hash *next;
};
hash *p[nr];
int n,op,x;
int adauga(int a)
{
hash *current=p[a];
while(current!=NULL)
{
if(current->info==x)
return 0;
current=current->next;
}
hash *newh=new hash;
newh->info = x;
if(p[a]==NULL)
{
p[a]=newh;
newh->next=NULL;
}
else
{
newh->next=p[a];
p[a]=newh;
}
return 0;
}
int sterge(int a)
{
hash *current=p[a],*current2=p[a];
if(p[a]==NULL)
return 0;
if(current->info==x)
{
p[a]=NULL;
delete current;
return 0;
}
current=current->next;
while(current!=NULL)
{
if(current->info==x)
{
current2->next=current->next;
delete current;
return 0;
}
current2=current;
current=current->next;
}
return 0;
}
int query(int a)
{
hash *current=p[a];
while(current!=NULL)
{
if(current->info==x)
return 1;
current=current->next;
}
return 0;
}
int main()
{
int i;
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
{
scanf("%d%d",&op,&x);
if(op==1)
adauga(x%nr);
if(op==2)
sterge(x%nr);
if(op==3)
printf("%d\n",query(x%nr));
}
return 0;
}