Cod sursa(job #2741020)

Utilizator faalaviaFlavia Podariu faalavia Data 15 aprilie 2021 11:14:21
Problema Hashuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 kb
#include <iostream>
#include <fstream>
#define MOD 666013  // primul nr prim dupa un milion
using namespace std;

ifstream fin("input.txt");
ofstream fout("hashuri.out");

struct nod
{
    int val;
    nod* urm;
};
nod *buckets[MOD];

int exista(int value)
{  if(buckets[value % MOD] == nullptr)
    return 0;
   nod *cap = buckets[value % MOD];
   while(cap != nullptr)
   {
       if(cap->val == value)
        return 1;

       cap = cap -> urm;
   }
   return 0;
}

void adauga(int value)
{
    if(exista(value))
        return;

    nod *first = buckets[value % MOD];
    nod *temp;
    temp = new nod;
    temp -> val = value;
    temp -> urm = nullptr;

    if(first == nullptr)
        buckets[value % MOD] = temp;
    else
    {   nod *aux = buckets[value % MOD];
        while(aux ->urm != nullptr)
          aux = aux -> urm;

        aux -> urm = temp;

    }
}

void sterge(int value)
{
    if(!exista(value))
        return;
    nod *first = buckets[value % MOD];
    nod *temp = first;
    if(temp -> val == value)
    {
        buckets[value % MOD] = temp->urm;
        delete temp;
        return;
    }

    nod *aux = first;
    while(aux->urm->val != value)
        aux = aux -> urm;  //parcurg lista pana inaintea nodului de sters

    temp = aux -> urm;
    aux  -> urm = aux -> urm -> urm;

    delete temp;
}


int main()

{ int n, op, x;
  fin >> n;

//  nod *last = nullptr;

  for(int i = 0 ; i < n ; i++)
    {
        fin >> op >> x;
        if(op == 1)
           adauga(x);
        else

        if(op == 2)
           sterge(x);
        else

        if(op == 3)
           fout << exista(x)<< "\n";
    }

    return 0;
}