Pagini recente » Cod sursa (job #2772726) | Borderou de evaluare (job #2013896) | Cod sursa (job #39271) | Cod sursa (job #540357) | Cod sursa (job #1564123)
#include <fstream>
#include <vector>
#define NMax 1000010
#define MOD 666013
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
int queries, hashTable[NMax];
int hashFunction(int val)
{
int h = 0, g;
while (val != 0) {
h = (h << 4) + val % 10;
val /= 10;
if (g = h & 0xF0000000)
h ^= g >> 24;
h &= ~g;
}
return h % MOD;
}
bool hashFind(int val)
{
int key = hashFunction(val), inc = 1;
while (hashTable[key] != val && inc < NMax) { //cand ma opresc
key = (key + inc) % NMax;
inc++;
}
if (inc == NMax)
return false;
return true;
}
void insertHash(int val)
{
int key = hashFunction(val), inc = 1;
if (!hashFind(val)) {
while (hashTable[key] != 0 && inc < NMax) {
key = (key + inc) % NMax;
inc++;
}
hashTable[key] = val;
}
}
void deleteHash(int val)
{
int key = hashFunction(val), inc = 1;
if (hashFind(val)) {
while (hashTable[key] != val && inc < NMax) {
key = (key + inc) % NMax;
inc++;
}
hashTable[key] = 0;
}
}
int main()
{
f >> queries;
int op, elem;
for (int i = 1; i <= queries; i++) {
f >> op >> elem;
if (op == 1) {
insertHash(elem);
}
else if (op == 2) {
deleteHash(elem);
}
else {
if (hashFind(elem))
g << "1\n";
else
g << "0\n";
}
}
}