Cod sursa(job #2107762)

Utilizator nic_irinaChitu Irina nic_irina Data 17 ianuarie 2018 18:07:07
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.87 kb
#include <iostream>
#include <fstream>
///pica pe un caz (: (: (: (: (: (: (: (: (: (: (: (: (: :)
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(int 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(int x, int k)
{
    nod *ult = new nod;
    ult->info = x;
    ult->prev = H[k];
    H[k] = ult;
}

void sterge_elem(int 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;
                delete crt;
            }
            break;
        }
        ult = crt;
    }
}

int main()
{
    int n, op;
    int 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)<<'\n'; //<------------endl =>TLE (:
            }
    }
    fin.close();
    fout.close();
    return 0;
}