Cod sursa(job #385238)

Utilizator MarquiseMarquise Marquise Data 22 ianuarie 2010 14:03:23
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#include <stdio.h>
#define MODULO 666012

int n;

struct nod
{
       int info;
       nod *next;
};
nod *v[MODULO];

int cauta(int nr)
{
    int h, ex = 0;
    h = nr % MODULO;
    nod *p;
    for ( p = v[h]; p && !ex; p = p-> next)
        if ( p -> info == nr)
           ex = 1;
           
    return ex;
}

void adaug(int nr)
{
     int h;
     nod *aux;
     h = nr % MODULO;
     aux = new nod;
     aux -> info = nr;
     aux -> next = v[h];
     v[h] = aux;     
}

void sterge(int nr)
{
     int h;
     nod *p, *q, *aux;
     
     h = nr % MODULO;
     p = q = v[h];
     if (p )
     {
           if ( p -> info == nr)
           {
              aux = p;
              p = p -> next;
              delete aux;
            }
            else   
            for ( p = p -> next; p; p = p -> next)
            {
                if ( p -> info == nr)
                {
                   aux = p;
                   q -> next = p -> next;
                   delete aux;
                 }
                 q = p;
            }
    }
}


int main()
{
    int i, op, nr, h;
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);
    
    scanf("%d", &n);
    for ( i = 1; i <= n; i++)
    {
        scanf("%d %d", &op, &nr);
            
        if ( op == 1)
           if (!cauta(nr))
              adaug(nr);
              
        if ( op == 2)
           sterge(nr);
          
        if ( op == 3)
           printf("%d\n", cauta(nr));         
        
    }
    
    return 0;
}