Cod sursa(job #3277718)

Utilizator catalinmarincatalinmarin catalinmarin Data 17 februarie 2025 12:18:40
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

// alegi BASE si MOD incat sa treaca testele, sa fie prime, base > 10 si prim si MOD prim, MOD nu foarte mare
const int BASE = 29;
const int MOD = 666013;

// vector de bucketuri, bucketul este (numar din baza presupusa convertita in baza 10) % mod;
vector<int> buckets[MOD + 5];


long long hasher(long long number){

    long long hashed_number = 0;
    long long coefficient = 1;

    while (number){

        hashed_number += (number % 10) * coefficient;
        coefficient *= BASE;
        hashed_number = hashed_number % MOD;

        number /= 10;

    }

    return hashed_number % MOD;

}

void solve(){

    int n;
    fin >> n;
    for (int i = 1; i <= n; i++){

        long long op, number;
        fin >> op >> number;

        long long hashed_nr = hasher(number);

        if (op == 1) {

            buckets[hashed_nr].push_back(number);

        } else if (op == 2){

            for (int i = 0; i < buckets[hashed_nr].size(); i++){
                if (buckets[hashed_nr][i] == number)
                    buckets[hashed_nr].erase(buckets[hashed_nr].begin()+i);
            }

        } else {

            bool found = false;
            for (int i = 0; i < buckets[hashed_nr].size(); i++){
                if (buckets[hashed_nr][i] == number) {
                    found = true;
                    break;
                }
            }

            if (found){
                fout << 1 << '\n';
            } else {
                fout << 0 << '\n';
            }

        }

    }

}

int main(){

    solve();

    return 0;
}