Cod sursa(job #1413712)

Utilizator cipriancxFMI - gr143 Timofte Ciprian cipriancx Data 2 aprilie 2015 01:29:02
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 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->urm=h[poz];
    p->val=val;
    h[poz]=p;
    }
}
}

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

                }
                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;
}