Cod sursa(job #2740990)

Utilizator XeinIonel-Alexandru Culea Xein Data 15 aprilie 2021 01:10:28
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
#include <fstream>

std::ifstream f("hashuri.in");
std::ofstream g("hashuri.out");

const unsigned PRIM = 71993;

struct Element
{
    unsigned nr;
    Element *urm;
};
Element* Tab[PRIM];

inline unsigned get_Hash(unsigned K) { return K % PRIM; }

bool cautare(unsigned K)
{
    Element* trans = Tab[get_Hash(K)];
    while(trans)
    {
        if(trans->nr == K)
            return true;
        trans = trans->urm;
    }
    return false;
}

void adaugare(unsigned K)
{
    unsigned Hash = get_Hash(K);

    Element* trans = Tab[Hash];
    while(trans)
    {
        if(trans->nr == K)
            return;
        trans = trans->urm;
    }
    Element* Nou = new Element;
    Nou->nr = K;
    Nou->urm = Tab[Hash];
    Tab[Hash] = Nou;
}

void stergere(unsigned K)
{
    unsigned Hash = get_Hash(K);

    if(!Tab[Hash])
        return;
    if(Tab[Hash]->nr == K)
    {
        Element* aux = Tab[Hash];
        Tab[Hash] = Tab[Hash]->urm;
        delete aux;
        return;
    }
    Element* trans = Tab[Hash];
    while(trans->urm)
    {
        if(trans->urm->nr == K)
        {
            Element* aux = trans->urm;
            trans->urm = aux->urm;
            delete aux;
            return;
        }
        trans = trans->urm;
    }
}

int main()
{
    unsigned N;
    f >> N;
    for(unsigned Op, Nr, i = 0; i < N; ++i)
    {
        f >> Op >> Nr;
        if(Op == 1)
            adaugare(Nr);
        else if(Op == 2)
            stergere(Nr);
        else
            g << cautare(Nr) << '\n';
    }
    return 0;
}