Pagini recente » Cod sursa (job #1715495) | Cod sursa (job #55643) | Cod sursa (job #2923925) | Cod sursa (job #1583672) | Cod sursa (job #491247)
Cod sursa(job #491247)
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
using namespace std;
#define infile "hashuri.in"
#define outfile "hashuri.out"
class HashTable {
public:
HashTable();
~HashTable();
int GetIndex(int elem);
void Add(int elem);
void Remove(int elem);
int Contains(int elem);
private:
vector<int> m_hash[666013];
};
HashTable::HashTable() {
}
HashTable::~HashTable() {
}
void HashTable::Add(int elem) {
int index = GetIndex(elem);
if (Contains(elem) == 0)
m_hash[index].push_back(elem);
}
void HashTable::Remove(int elem) {
int index = GetIndex(elem);
vector<int>::iterator it = m_hash[index].begin();
for (; it != m_hash[index].end(); it++)
if (*it == elem) {
m_hash[index].erase(it);
return;
}
}
int HashTable::Contains(int elem) {
int index = GetIndex(elem);
vector<int>::iterator it = m_hash[index].begin();
for (; it != m_hash[index].end(); it++)
if (*it == elem) {
m_hash[index].erase(it);
return 1;
}
return 0;
}
int HashTable::GetIndex(int elem) {
return elem % 666013;
}
int main() {
ifstream in(infile);
ofstream out(outfile);
int n;
in >> n;
HashTable *h = new HashTable();
for (int i = 0; i < n; i++) {
int type, elem;
in >> type >> elem;
switch (type) {
case 1:
h->Add(elem);
break;
case 2:
h->Remove(elem);
break;
case 3:
out << h->Contains(elem) << endl;
break;
}
}
delete h;
h = NULL;
return 0;
}