Cod sursa(job #1413720)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 2 aprilie 2015 01:36:59
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.83 kb
#include <iostream>
#include <cstdio>
#include<cstdlib>
using namespace std;
int prim=1000003;
int n;
typedef struct Noduri
{
    int val;
    struct Noduri *urm;
} Nod;

Nod *h[1000005];

void adauga(int val, int poz)
{
    if(h[poz]==NULL)
    {
        h[poz]=(Nod *)malloc(sizeof(Nod));
        h[poz]->urm=NULL;
        h[poz]->val=val;
    }
    else
    {
        int aparitii=0;
        Nod *p=h[poz];
        while(p)
        {
            if(p->val == val)aparitii++;
            p=p->urm;
        }
        if(!aparitii)
        {
            p=(Nod *)malloc(sizeof(Nod));
            p->urm=h[poz];
            p->val=val;
            h[poz]=p;
        }
    }
}

void sterge(int val, int poz)
{
    if(h[poz])
    {
        Nod *p,*r;
        if(h[poz]->val == val){ p=h[poz];  h[poz]=h[poz]->urm; free(p); }
        else
        {
            p=h[poz]->urm;
            Nod *q=h[poz];
            while(p)
            {
                if(p->val == val)
                {

                    q->urm=p->urm;
                    free(p);
                    p=NULL;

                }
                else
                {
                    q=q->urm;
                    p=p->urm;

                }
            }

        }
    }
}

int verif(int val, int poz)
{
    if(!h[poz])return 0;
    Nod *p=h[poz];
    while(p)
    {
        if(p->val == val)return 1;
        p=p->urm;
    }
    return 0;

}


int main()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    cin>>n;
    int a,b;
    for(int i=1; i<=n; i++)
    {
        scanf("%d %d",&a,&b);
        if(a==1)
        {
            adauga(b,b%prim);
        }
        if(a==2)sterge(b,b%prim);
        if(a==3)printf("%d\n",verif(b,b%prim));

    }
    return 0;
}