Cod sursa(job #787312)

Utilizator f.v.antonFlavius Anton f.v.anton Data 13 septembrie 2012 01:56:03
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <list>
#include <vector>

#define NMAX 611953 // al 50 000-lea nr prim

using namespace std;

list<int>::iterator Hsearch(vector<list<int> > &H, int num)
{
	list<int>::iterator it = H[num % NMAX].begin();

	while (it != H[num % NMAX].end()) {
		if (*it == num)
			return it;
		it++;
	}
	return H[num % NMAX].end();
}

void Hinsert(vector<list<int> > &H, int num)
{
	if (Hsearch(H, num) == H[num % NMAX].end())
		H[num % NMAX].push_front(num);
}

void Hdelete(vector<list<int> > &H, int num)
{
	list<int>::iterator it = Hsearch(H, num);
	if (it != H[num % NMAX].end())
		H[num % NMAX].erase(it);
}

int main()
{
	fstream f("hashuri.in", ios::in), g("hashuri.out", ios::out);
	vector<list<int> > H;
	H.resize(NMAX);
	int N, op, num;
	list<int>::iterator it;
	f >> N;

	while (f >> op >> num) {
		switch (op) {
			case 1:
				Hinsert(H, num);
				break;
			case 2:
				Hdelete(H, num);
				break;
			case 3:
				it = Hsearch(H, num);
				if (it != H[num % NMAX].end())
					g << 1 << '\n';
				else
					g << 0 << '\n';
				break;
			default:
				break;
		}
	}
	
	f.close();
	g.close();
	return 0;
}