Cod sursa(job #2615229)

Utilizator paulaiugaPaula Iuga paulaiuga Data 13 mai 2020 21:19:57
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.05 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

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


class Hash
{
private:

    vector<int>h[666013];
    //int nmax;

public:
//    Hash(int val = 666013):Nmax(val){
//
//    }
//    ~Hash(){
//    h.clear();
//    }
    bool find_value(int nr_cautat)
    {
        int val_hash = nr_cautat%666013;
        vector<int>::iterator it;
        for(it = h[val_hash].begin(); it!= h[val_hash].end(); ++it)
        {
            if(*it == nr_cautat)
            {
                return true;
            }
        }

        return false;

    }


    void erase_value(int nr_de_sters)
    {
        int val_hash = nr_de_sters%666013;
        vector<int>::iterator it;
        for(it = h[val_hash].begin(); it!= h[val_hash].end(); it++)
        {
            if(*it == nr_de_sters)
            {
                h[val_hash].erase(it);
                return;
            }
        }
    }


    void insert_value(int nr)
    {
        if(find_value(nr) == false)
        {
            int val_hash = nr%666013;
            h[val_hash].push_back(nr);
        }
    }


}H;


int main()
{


    int n;
    int nr_op, x;
    in>>n;
    while(n)
    {
        in>>nr_op>>x;

        switch(nr_op)
        {
        case 1://operatia de tipul 1: se adauga elementul x la multime
            //cout<<1;
            H.insert_value(x);
            break;

        case 2://operatia de tipul 2: se sterge elementul x
            //cout<<2;
            H.erase_value(x);
            break;

        case 3://operatia de tipul 3: returneaza 1 daca si numai daca x este in multime, iar in caz contrar returneaza 0.
            //cout<<3;
            if(H.find_value(x)== true)
                out<<1<<"\n";
            else
                out<<0<<"\n";

            break;

        default:
            out<<"operatie necunoscuta";
            break;
        }

        n--;
    }
    in.close();
    out.close();
    return 0;
}