Cod sursa(job #2405091)

Utilizator Costy_Suruniuc Constantin Costy_ Data 13 aprilie 2019 21:59:15
Problema Hashuri Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.73 kb
#include <iostream>
#include <fstream>

#define M 666013

using namespace std;

struct node
{
	bool ex = 0;
	int number;
	node *next;
};

node *table[M];

void add(int val)
{
	int temp = val % M;
	node*& nod = table[temp];
	if (nod == nullptr)
	{
		nod = new node;
		nod->ex = 1;
		nod->number = val;
		nod->next = nullptr;
	}
	else
	{
		if (nod->number == val)
			return;
		for (; nod->next != nullptr; nod = nod->next)
		{
			if (nod->number == val)
				return;
		}
		nod->next = new node;
		nod->next->ex = 1;
		nod->next->number = val;
		nod->next->next = nullptr;
	}
}
void del(int val)
{
	int temp = val % M;
	node*& nod = table[temp];
	if (nod == nullptr)
	{
		return;
	}
	else
	{
		if (nod->number == val)
		{
			delete nod;
			nod = nullptr;
			return;
		}
		for (; nod->next != nullptr; nod = nod->next)
		{
			if (nod->next->number == val)
			{
				node* tnode = nod->next;
				nod->next = tnode->next;
				delete tnode;
				return;
			}
		}
	}
}

bool ext(int val)
{
	int temp = val % M;
	node*& nod = table[temp];
	if (nod == nullptr)
	{
		return false;
	}
	else
	{
		if (nod->number == val)
		{
			return true;
		}
		if (nod->next != nullptr)
		{
			for (; nod->next != nullptr; nod = nod->next)
			{
				if (nod->number == val)
				{
					return true;
				}
			}
		}
	}
	return false;
}

int main()
{
	ifstream in;
	in.open("hashuri.in");
	ofstream out;
	out.open("hashuri.out");
	int n, op, val;
	in >> n;
	for (int i = 0; i < n; ++i)
	{
		in >> op >> val;
		switch (op)
		{
		case 1:
			add(val);
			break;
		case 2:
			del(val);
			break;
		case 3:
			out << ext(val) << '\n';
			break;
		}
	}
	in.close();
	out.close();
}