Cod sursa(job #1841330)

Utilizator teo.cons98Constantin Teodor-Claudiu teo.cons98 Data 5 ianuarie 2017 15:26:16
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.46 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

int n, op, el, valoare = 13;

struct nod
{
    int val;
    nod *nxt;
} *p[666013], *u[666013];


int hashing(int el)
{
    el %= 666013;
    el += 2;
    el*= valoare;
    el%= 666013;
    return el;
}

bool verificare(int el)
{
    int h = hashing(el);
    nod *k;
    k = p[h];
    while(k->val != 0 and k->val != el)
    {
        k = k->nxt;
    }
    if(k->val == el) return 1;
    else return 0;
}

void adaugare(int el)
{
    int h= hashing(el);
    nod *k;
    k = new(nod);
    k->val = 0;
    u[h]->val = el;
    u[h]->nxt = k;
    u[h] = k;
}

void stergere(int el)
{
    int h = hashing(el);
    nod *k;
    k = new(nod);
    k = p[h];
    while(k->val != 0 and k->val != el)
    {
        k = k->nxt;
    }
    if(k->val == el)
    {
        k->val = -1;
    }
}

int main()
{
    for(int i = 0; i < 666013; ++i)
    {
        p[i] = new(nod);
        u[i] = new(nod);
        p[i]->val = -1;
        p[i]->nxt = u[i];
        u[i]->val = 0;
    }
    fin>>n;
    for(int i = 1; i <= n; ++i)
    {
        fin>>op>>el;
        if(op == 1)
        {
            if(verificare(el) == 0) adaugare(el);
        }
        else if(op == 2)
        {
            stergere(el);
        }
        else if(op == 3)
        {
            fout<<verificare(el)<<'\n';
        }
    }
}