Cod sursa(job #2773591)

Utilizator iustin.pericicaPericica Iustin iustin.pericica Data 7 septembrie 2021 19:53:46
Problema Hashuri Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.98 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

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

// https://www.geeksforgeeks.org/c-program-hashing-chaining/
class Hash
{
    unsigned long long BUCKET;

    list<unsigned long long> *table;
public:
    Hash(unsigned long long V);
    void insertItem(unsigned long long x);

    void deleteItem(unsigned long long key);

    bool findItem(unsigned long long key);

    unsigned long long hashFunction(unsigned long long x) {
        return (x % BUCKET);
    }

    void displayHash();
};

Hash::Hash(unsigned long long b)
{
    this->BUCKET = b;
    table = new list<unsigned long long>[BUCKET];
}

void Hash::insertItem(unsigned long long key)
{
    unsigned long long index = hashFunction(key);
    table[index].push_back(key);
}

void Hash::deleteItem(unsigned long long key)
{
  unsigned long long index = hashFunction(key);

  list <unsigned long long> :: iterator i;
  for (i = table[index].begin();i != table[index].end(); i++) {
    if (*i == key)
      break;
  }

  if (i != table[index].end())
    table[index].erase(i);
}

bool Hash::findItem(unsigned long long key){

    unsigned long long index = hashFunction(key);
      list <unsigned long long> :: iterator i;
      for (i = table[index].begin(); i != table[index].end(); i++) {
        if (*i == key)
          return true;
      }

    return false;

}

int main()
{
    unsigned long long n;
    unsigned long long operatie, x;
    fin>>n;
    Hash hashSet(666013);
    for(unsigned long long i = 1;i<=n;++i){
        fin>>operatie>>x;
        if(operatie == 1 && !hashSet.findItem(x)){
            hashSet.insertItem(x);
        }
        else if(operatie == 2){
            hashSet.deleteItem(x);
        }
        else{
            if(!hashSet.findItem(x)){
                fout<<0<<"\n";
            }
            else fout<<1<<"\n";
        }
    }
    return 0;
}