Cod sursa(job #1989052)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 5 iunie 2017 18:16:49
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.88 kb
#include <iostream>
#include <cstdio>
using namespace std;
const int PRIME_NUMBER=93479;
int h(int numToHash)
{
    return numToHash%PRIME_NUMBER;
}
struct nod
{
    int val;
    nod* link;
    public:
    nod()
    {
        val=0;
        link=NULL;
    }
};
nod* lista[PRIME_NUMBER+2];

void adaugare(int nr)
{
    nod*placeToInset=lista[h(nr)];
    bool isFirst=true;
    while(isFirst||(placeToInset->val!=0&&placeToInset->val!=nr))
    {
        placeToInset=placeToInset->link;
        isFirst=false;
    }
    if(placeToInset->val==nr)
        return;

    placeToInset->val=nr;
    placeToInset->link=new nod();
}
void stergere(int nr)
{
    nod*placeToInset=lista[h(nr)];
    nod*aux;
    while(placeToInset->val!=nr&&placeToInset->link!=NULL)
    {
        aux=placeToInset;
        placeToInset=placeToInset->link;
    }
    //printf("%d , %d\n",aux->val,placeToInset->val);
    if(placeToInset->val==nr)
    {
        aux->link=placeToInset->link;
        delete placeToInset;
    }
}
bool cautare(int nr)
{
    nod*placeToInset=lista[h(nr)];
    while(placeToInset->val!=nr&&placeToInset->link!=NULL)
    {
        placeToInset=placeToInset->link;
    }
    if(placeToInset->val==nr)
        return true;
    return false;
}
int main()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    for(int i=0;i<PRIME_NUMBER+2;i++)
        {
            lista[i]=new nod();
            lista[i]->link=new nod();
        }
    int n,op,nr;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d%d",&op,&nr);
        if(op==1)
        {
            adaugare(nr);
            continue;
        }
        if(op==2)
        {
            stergere(nr);
            continue;
        }
        if(op==3)
        {
            printf("%d\n",cautare(nr));
        }
    }
    return 0;
}