Cod sursa(job #2775393)

Utilizator MihaiZ777MihaiZ MihaiZ777 Data 15 septembrie 2021 17:10:32
Problema Hashuri Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.59 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

const int modulo = 666013;
const int base = 11;

int n;
vector <int> v[666013];
int index;


int Hash(int num)
{
    int myHash = 0;
    int currentMultiplier = 1;
    while (num > 0)
    {
        myHash += currentMultiplier * (num % 10);
        myHash %= modulo;
        num /= 10;
        currentMultiplier *= base;
    }

    return myHash;
}

vector<int>::iterator FindValue(int num)
{
    int myHash = Hash(num);
    return find(v[myHash].begin(), v[myHash].end(), num);
}


void InsertValue(int num)
{
    int myHash = Hash(num);
    vector<int>::iterator myIterator = FindValue(num);
    if (myIterator != v[myHash].end() && !v[myHash].empty())
        return;
    v[myHash].push_back(num);
}


void DeleteValue(int num)
{
    int myHash = Hash(num);
    vector<int>::iterator myIterator = FindValue(num);
    if (myIterator != v[myHash].end() && !v[myHash].empty())
        v[myHash].erase(myIterator);
}


int main()
{
    fin >> n;
    for (int i = 0; i < n; i++)
    {
        int type, num;
        fin >> type >> num;

        switch (type)
        {
            case 1:
                InsertValue(num);
                break;
            case 2:
                DeleteValue(num);
                break;
            case 3:
                int myHash = Hash(num);
                fout << (FindValue(num) != v[myHash].end()) << '\n';
                break;
        }
    }

}