Cod sursa(job #1846192)

Utilizator vladvlad00Vlad Teodorescu vladvlad00 Data 12 ianuarie 2017 12:31:43
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 kb
#include <fstream>
#define W 1000003

using namespace std;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

struct NOD
{
    int x;
    NOD *urm;
};

int H(int x)
{
    return x%W;
}

void add(NOD*&prim, int nr);
void del(NOD*&prim, int nr);
bool verif(NOD*&prim, int nr);

int n, op, nr;
NOD*l[1000005];

int main()
{
    int i;

    fin >> n;
    for (i=1;i<=n;i++)
    {
        fin >> op >> nr;
        if (op == 1)
            add(l[H(nr)],nr);
        else if (op == 2)
            del(l[H(nr)],nr);
        else fout << verif(l[H(nr)],nr) << '\n';
    }
    return 0;
}

void add(NOD*&prim, int nr)
{
    NOD*p,*q;
    if (!prim)
    {
        prim = new NOD;
        prim->urm = NULL;
        prim->x = nr;
        return;
    }
    p = prim;
    while (p->urm)
    {
        if (p->x == nr)
            return;
        p = p->urm;
    }
    if (p->x == nr)
        return;
    q = new NOD;
    q->urm = NULL;
    q->x = nr;
    p->urm = q;
}

void del(NOD*& prim, int nr)
{
    NOD*p,*q;

    if (!prim)
        return;
    if (prim->x == nr)
    {
        p = prim;
        prim = prim->urm;
        delete p;
        return;
    }
    p = prim;
    while (p->urm && p->urm->x!=nr)
        p = p->urm;
    if (p->urm)
    {
        q = p->urm;
        p->urm = p->urm->urm;
        delete q;
    }
}

bool verif(NOD*&prim, int nr)
{
    NOD*p;

    p = prim;
    while (p)
    {
        if (p->x == nr)
            return 1;
        p = p->urm;
    }
    return 0;
}