Cod sursa(job #1991575)

Utilizator BogdanisarBurcea Bogdan Madalin Bogdanisar Data 17 iunie 2017 14:16:35
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.77 kb
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <stack>
#include <vector>

using namespace std;
ifstream in("hashuri.in");
ofstream out("hashuri.out");

#define ll long long
#define pb push_back
#define idx val%mod
const int inf = 1e9 + 5;
const int NMax = 2e6 + 5;
const int mod = 100001;

int N,M;
vector<int> h[mod];
// h = hash care foloseste numarul mod pentru a distribui valorile
// daca un numar val se afla in hash, atunci
// el va fi pozitionat la indexul de valoare (val % mod)

bool have(int);
void add(int);
void rem(int);
// have(x) - return-eaza true sau false daca valoarea x se gaseste in hash sau nu
// add(x) - adauga valoarea x in hash
// rem(x) - scoate valoarea x din hash

int main() {
    in>>M;

    while (M--) {
        int tip,x;
        in>>tip>>x;

        switch(tip) {
        case 1: {
            if (!have(x)) {
                add(x);
            }

            break;
        }
        case 2: {
            rem(x);

            break;
        }
        case 3: {
            if (have(x)) {
                out<<1<<'\n';
            }
            else {
                out<<0<<'\n';
            }

            break;
        }
        }
    }

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

bool have(int val) {

    for (int elem : h[idx]) {
        if (elem == val) {
            return true;
        }
    }

    return false;
}

void add(int val) {
    h[idx].pb(val);
}

void rem(int val) {

    for (int i=0;i < (int)h[idx].size();++i) {
        if (h[idx][i] != val) {
            continue;
        }

        // interschimba elementul egal cu val si ultimul
        swap(h[idx][i],h[idx][h[idx].size()-1]);
        h[idx].pop_back();
        return;
    }
}