Cod sursa(job #823925)

Utilizator PirvuMihaiPirvu Mihai PirvuMihai Data 25 noiembrie 2012 18:46:21
Problema Hashuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <stdio.h>

#define rest 666013

struct nod
{
    int nr;
    nod *urm;
} *v[rest];

nod *Verif(int x)
{
    int q=x%rest;
    nod *y;
    if(v[q])
    {
        nod *p=v[q];
		if(p->nr==x)
			return p;
        while(p)
        {
            if(p->nr==x)
				return y;
            y=p;
            p=p->urm;
        }
    }
   return 0;
}

void Stergere(int x)
{
    nod *b;
    b=Verif(x);
    if(!b)
        return;
    int q=x%rest;
    if(b==v[q])
    {
        v[q]->urm=v[q];
        delete b;
    }
    else
    {        
        nod *q=b->urm;
        b->urm=b->urm->urm;
        delete q;
    }
}

void Adaugare(int x)
{
    nod *p=Verif(x);
    
    if(p)
        return;
    
    int q=x%rest;
    p=new nod;
    
    p->nr=x;
    if(v[q])
        p->urm=v[q];
    else
        p->urm=0;
    v[q]=p;
}

int main ()
{
    FILE *fin, *fout;
    fin=fopen("hashuri.in", "rt");
    fout=fopen("hashuri.out", "wt");
    
    int i,n;
    fscanf(fin,"%i", &n);    
    
    for(i=0;i<n;i++)
    {
        int a, x;
        fscanf(fin, "%i %i",&a, &x); 
        if(a==1)
            Adaugare(x);
        else if(a==2)
            Stergere(x);
        else if(a==3)
        {
            fprintf(fout,"%i\n", Verif(x) ? 1 : 0);
        }        
    }
}