Cod sursa(job #238838)

Utilizator gh09chisinau gheorghita gh09 Data 3 ianuarie 2009 13:18:02
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.7 kb
# include <cstdio>
# include <vector>

# define FIN "hashuri.in"
# define FOUT "hashuri.out"
# define Mod 666013

struct lista
{
   int info;
   lista *next;
} *Hash[Mod];

int N, i, val, op;

     void add(lista *&p, int val)
     {
         lista *q;
         
         for (q = p; q && q -> info != val; q = q -> next);
         
         if (q) return;
         
         q = new lista;
         q -> info = val;
         q -> next = p;
         
         p = q;
     }
     
     void find(lista *p, int val)
     {
         lista *q;
         
         for (q = p; q; q = q -> next)
           if (q -> info == val)
              {
                 printf("1\n");
                 return;
              }
         
         printf("0\n");
     }
     
     void erase(lista *&p, int val)
     {
         lista *q, *w;
         
         for (q = p; q && q -> info != val; q = q -> next);
           
         if (q == NULL) return;
           
         if (q == p)
            {
               w = p;
               p = p -> next;
               delete w;
            }
         else
            {
               w = q;
               q = w -> next;
               delete w;
            }
     }

     int main()
     {
         freopen(FIN,"r",stdin);
         freopen(FOUT,"w",stdout);
         
         scanf("%d",&N);
         for (i = 1; i <= N; ++i)
            {
                scanf("%d %d",&op,&val);
                
                if (op == 1) add(Hash[val % Mod], val);
                if (op == 2) erase(Hash[val % Mod], val);
                if (op == 3) find(Hash[val % Mod], val);
            }
         
         return 0;
     }