Cod sursa(job #805468)

Utilizator razvan9310FMI - Razvan Damachi razvan9310 Data 31 octombrie 2012 15:40:52
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include <iostream>
#include <fstream>
using namespace std;

#define m 896009
#define mod 666013

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

void init(/*nod *&l*/)
{
	int i;
	for (i=0;i<m;i++)
	{
		l[i] = new nod;
		l[i]->inf = 0;
		l[i]->adr = NULL;
	}
}

void add(/*nod *l, */int x)
{
	if (l[x%m] == NULL)
	{
		l[x%m] = new nod;
		l[x%m]->inf = 0;
		nod *pateu = new nod;
		pateu->inf = x;
		pateu->adr = NULL;
		l[x%m]->adr = pateu;
		return;
	}
	nod *parc = l[x%m];
	bool gasit = false;
	while (parc->adr && !gasit) 
	{
		parc = parc->adr;
		if (parc->inf == x) gasit = true;
	}
	if (gasit) return;
	nod *aux = new nod;
	aux->inf = x; aux->adr = NULL;
	parc->adr = aux;
}


void del(/*nod *l, */int x)
{
	if (l[x%m] == NULL) return;
	nod *parc = l[x%m];
	bool gasit = false;
	while (parc->adr && !gasit)
		if (parc->adr->inf == x) gasit = true;
		else parc = parc->adr;
	if (!gasit) return;
	nod *aux = parc->adr;
	if (parc->adr->adr == NULL)
	{
		parc->adr = NULL;
		delete aux;
	}
	else
	{
		parc->adr = aux->adr;
		delete aux;
	}
}

bool search(/*nod *&l, */int x)
{
	if (l[x%m] == NULL) return false;
	nod *parc = l[x%m];
	while (parc->adr)
	{
		parc = parc->adr;
		if (parc->inf == x) return true;
	}
	return false;
}

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