Cod sursa(job #2881814)

Utilizator popashtefan10Popa Stefan popashtefan10 Data 30 martie 2022 21:39:26
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

/// Operatii:
/// Add(x) -> adauga pe x in multime
/// Erase(x) -> scoate pe x din multime
/// Exists(x) -> verifica daca x se afla in multime
class Hash {

private:
  static const int MOD = 666013;
  vector<int> buckets[MOD + 5];

public:
  void add(int x) {
    int x_bucket = x % MOD;
    // verific daca x se afla deja in bucket
    for(int i = 0; i < buckets[x_bucket].size(); i++)
      if(buckets[x_bucket][i] == x)
        return;
    // daca nu se afla il adaug
    buckets[x_bucket].push_back(x);
  }

  void del(int x) {
    int x_bucket = x % MOD;
    // il caut pe x in bucket
    for(int i = 0; i < buckets[x_bucket].size(); i++)
      if(buckets[x_bucket][i] == x) {
        buckets[x_bucket].erase(buckets[x_bucket].begin() + i);
        return;
      }
  }

  bool exists(int x) {
    int x_bucket = x % MOD;

    for(int i = 0; i < buckets[x_bucket].size(); i++)
      if(buckets[x_bucket][i] == x)
        return true;
    return false;
  }
};

int main() {
  freopen("hashuri.in", "r", stdin);
  freopen("hashuri.out", "w", stdout);

  Hash my_hash;
  int n, op, x;
  scanf("%d", &n);
  for(int i = 1; i <= n; i++) {
    scanf("%d %d", &op, &x);
    if(op == 1)
      my_hash.add(x);
    else if(op == 2)
      my_hash.del(x);
    else if(op == 3)
      printf("%d\n", my_hash.exists(x));
  }

  return 0;
}