Cod sursa(job #723929)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 26 martie 2012 01:32:43
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>
#define prim 4019
using namespace std;
struct hash{ int val; hash *urm; }*L[prim];
int find(int x)
{ hash *aux;
for(aux=L[x%prim];aux!=NULL;aux=aux->urm)
    if(aux->val==x)return 1;
return 0;
}
void add(int x)
{ hash *aux;
aux=new hash; aux->val=x; aux->urm=L[x%prim]; L[x%prim]=aux;
}
void erase(int x)
{ hash *adr,*aux,*pnt;
if(L[x%prim]!=NULL)
    {
    if(L[x%prim]->val==x)
                     {
                      adr=L[x%prim]; L[x%prim]=L[x%prim]->urm; delete adr;
                     }
else {
     adr=NULL;
     for(aux=L[x%prim];aux->urm!=NULL&&adr==NULL;aux=aux->urm)
        if(aux->urm->val==x){ adr=aux->urm; pnt=aux; }
     pnt->urm=adr->urm; delete adr;
     }
     }
}
int main()
{ int i,op,x,n;
freopen("hashuri.out","w",stdout);
freopen("hashuri.in","r",stdin); scanf("%d\n",&n);
for(i=1;i<=n;++i)
    {
    scanf("%d %d\n",&op,&x);
    switch(op)
        {
        case 1:
            if(find(x)==0)add(x);
            break;
        case 2:
            erase(x);
            break;
        case 3:
            printf("%d\n",find(x));
            break;
        }
    }
return 0;
}