Cod sursa(job #1494070)

Utilizator ArkinyStoica Alex Arkiny Data 30 septembrie 2015 18:04:42
Problema Hashuri Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<fstream>

#define DELIM 44357

using namespace std;

struct Node
{
	Node *next;
	int val;
};

Node *h[21277];

void add(int e,int val)
{
	Node *p = new Node;
	p->next = h[e];
	p->val = val;
	h[e] = p;
}

void remove(int e, int val)
{
	Node *p,*q;
	p = h[e];

	if (!p)
		return;
	
	if (p->val == val)
	{
		q = h[e];
		h[e] = p->next;
		delete q;
		return;
	}

	while (p->next)
	{
		if (p->next->val == val)
		{
			q = p->next;
			p->next = q->next;
			delete q;
			return;
		}

		p = p->next;
	}

	return;
}

int find(int e, int val)
{
	Node *p=h[e];
	while (p)
	{
		if (p->val == val)
			return 1;
		p = p->next;
	}
	return 0;
}

int inline Hash(int e)
{
	return e % DELIM;
}

int main()
{
	ifstream f_in("hashuri.in");
	ofstream f_out("hashuri.out");

	int N,op,val;

	f_in >> N;

	for (int i = 1;i <= N;++i)
	{
		f_in >> op;
		f_in >> val;

		if (op == 1)
		{
			int e = Hash(val);
			if (!find(e, val))
				add(e, val);
		}
		else if (op == 2)
		{
			remove(Hash(val), val);
		}
		else
		{
			f_out << find(Hash(val), val)<<'\n';
		}
	}

	f_in.close();
	f_out.close();

	return 0;
}