Pagini recente » Cod sursa (job #2470483) | Cod sursa (job #2715324) | Cod sursa (job #1068896) | Cod sursa (job #1347737) | Cod sursa (job #3277718)
#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;
}