Cod sursa(job #526426)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 28 ianuarie 2011 12:34:21
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<stdio.h>
#include<stdlib.h>
#define N 1000001
typedef struct nod
{long info;
nod *urm;}Nod,*list;
int x;
long n,y,i;
list h[N];

long hash(long y)
{return y%N;}

int find(list l,long y)
{Nod *p;
for(p=l;p!=NULL;p=p->urm)
if(p->info==y)
       return 1;
return 0;}

void add(list &l,long y)
{Nod *nou=new Nod;
nou->urm=l;
nou->info=y;
l=nou;}

void del(list &l,long y)
{Nod *p=l,*q=l;
while(p!=NULL&&p->info!=y)
       {q=p;
       p=p->urm;}
if(p!=NULL)
       {if(q==p)
               l=l->urm;
       else
               q->urm=p->urm;
       free(p);}}

int main()
{freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
scanf("%ld\n",&n);
for(i=0;i<N;i++)
      h[i]=NULL;
for(i=1;i<=n;i++)
      {scanf("%d%ld\n",&x,&y);
      if(x==1)
              {if(find(h[hash(y)],y)==0)
                      add(h[hash(y)],y);}
      else
              if(x==2)
                      {if(find(h[hash(y)],y)==1)
                               del(h[hash(y)],y);}
              else
                      printf("%d\n",find(h[hash(y)],y));}
fclose(stdin);
fclose(stdout);
return 0;}