Cod sursa(job #491361)

Utilizator iraIrina Stanescu ira Data 11 octombrie 2010 00:28:02
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#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) {
			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;
}