Cod sursa(job #2107750)

Utilizator MrRobotMrRobot MrRobot Data 17 ianuarie 2018 17:48:52
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#include <iostream>
#include <fstream>

using namespace std;

#define mod 666013

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

struct nod
{
    long long info;
    nod *prev;
}*H[mod];

int cauta_elem(long long x, int k)
{
    nod *crt;  //parcurgem hashul
    for(crt = H[k]; crt!=NULL; crt= crt->prev)
        if(crt->info == x)
            return 1;
    return 0;
}

void adauga_elem(long long x, int k)
{
    nod *ult = new nod;
    ult->info = x;
    ult->prev = H[k];
    H[k] = ult;
}

void sterge_elem(long long x, int k)
{
    nod *crt, *ult;
    for(crt = H[k]; crt != NULL; crt = crt->prev)
    {
        if(crt->info == x)
            if(crt == H[k])
                H[k] = NULL;
            else
                ult->prev = crt->prev;
        ult = crt;
    }
}

int main()
{
    int n, op;
    long long x;
    fin>>n;
    int i;
    for(i=1; i<=n; i++)
    {
        fin>>op>>x;
        int k = x%mod;
        if(op==1)
        {
            ///se adauga elem x in multime, daca acesta nu exista
            if(cauta_elem (x, k) == 0)
                adauga_elem(x, k);

            //parcurge hash pt verificare
            //nod *crt;  //parcurgem hashul
            //for(crt = H[k]; crt!=NULL; crt= crt->prev)
                //cout<<crt->info<<endl;
        }
        else
            if(op==2)
            {
                ///se sterge elem x daca exista
                sterge_elem(x, k);
            }
            else //op==3
            {
                ///1=> x e in multime /// 0=> x nu e in multime
                fout<<cauta_elem(x, k)<<endl;

            //parcurge hash pt verificare
            //nod *crt;  //parcurgem hashul
            //for(crt = H[k]; crt!=NULL; crt= crt->prev)
                //cout<<crt->info<<endl;
            }
    }
}