Cod sursa(job #271458)

Utilizator hasegandaniHasegan Daniel hasegandani Data 5 martie 2009 13:08:31
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<stdio.h>

#define mod 666013

struct nod
{
    int info;
    nod *urm;
} *l[mod+1];

void adauga(int);
void sterge(int);
int valid(int);

int main()
{
    int n,a,b;
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    scanf("%d",&n);
    for(;n;n--)
        {
            scanf("%d%d",&a,&b);
            if (a==1)
                adauga(b);
            if (a==2)
                sterge(b);
            if (a==3)
                printf("%d\n",valid(b));
            //printf("%d\n",n);
        }
    return 0;
}

void adauga(int b)
{
    if (!valid(b))
        {
            int poz=b % mod;
            nod *p=new nod;
            p->info=b;
            p->urm=l[poz];
            l[poz]=p;
        }      
}

void sterge(int b)
{
    int poz=b % mod;
    
    for(  ;l[poz]->info == b && l[poz];  l[poz]=l[poz]->urm) ;
        
    nod *t=l[poz];
        
    for(;t->urm;t=t->urm)
        if (t->urm->info == b)
            {
                nod *q=t->urm;
                t->urm=q->urm;
                delete q;
            }
            
}

int valid(int b)
{
    int poz=b % mod;
        
    nod *t=l[poz];
        
    for(;t;t=t->urm)
        if (t->info == b)
            return 1;
            
    return 0;
}