Cod sursa(job #806195)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 2 noiembrie 2012 00:27:49
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
using namespace std;

const int m = 1<<20;

struct nod
{
	int inf;
	nod *adr;
}*l[m];

void add(int x)
{
	const int mod = x%m;
	/*if (l[mod] == NULL)
	{
		l[mod] = new nod;
		l[mod]->inf = x;
		l[mod]->adr = NULL;
		return;
	}*/
	nod *p = new nod;
	p->inf = x;
	p->adr = l[mod];
	l[mod] = p;
}

bool search(int x)
{
	const int mod = x%m;
	if (l[mod] == NULL) return false;
	if(l[mod]->inf == x) return true;
	nod *p = l[mod];
	while (p->adr)
	{
		p = p->adr;
		if (p->inf == x) return true;
	}
	if (p->inf == x) return true;
	return false;
}

void del(int x)
{
	const int mod = x%m;
	nod *p = l[mod];
	if (p->inf == x)
	{
		nod *aux = p;
		p = p->adr;
		delete aux;
		return;
	}
	for (p=l[mod]; p->adr; p = p->adr)
		if (p->adr->inf == x)
		{
			nod *aux = p->adr;
			p->adr = aux->adr;
			delete aux;
			return;
		}
}

int main()
{
	ifstream in("hashuri.in"); ofstream out("hashuri.out");
	int n, i, c, x;
	in>>n;
	for (i=0;i<n;i++)
	{
		in>>c>>x;
		switch (c)
		{
			case 1: if (!search(x)) add(x); break;
			case 2: if (search(x)) del(x); break;
			case 3: out<<search(x)<<endl; break;
		}
	}
}