Cod sursa(job #1774364)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 8 octombrie 2016 20:42:42
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <iostream>
#include <fstream>
#define NMAX 666013
#define BUFF_SIZE 300000

using namespace std;

ifstream in("hashuri.in");
ofstream out("hashuri.out");
char buffer[BUFF_SIZE];
int pos = 0;

void Read(int &a)
{
	while (!isdigit(buffer[pos]))
		if (++pos == BUFF_SIZE)
			in.read(buffer, BUFF_SIZE), pos = 0;
	a = 0;
	while (isdigit(buffer[pos]))
	{
			a = a * 10 + buffer[pos] - '0';
		if (++pos == BUFF_SIZE)
			in.read(buffer, BUFF_SIZE), pos = 0;
	}
}

struct node{
	int key;
	node *next;
};

struct _list{
	node *head;
};

_list H[NMAX];

bool _find(_list L, int key)
{
	for (node *p = L.head; p != NULL; p = p->next)
		if (p->key == key)
			return 1;
	return 0;
}

void push(_list &L, int key)
{
	if (!_find(L, key))
	{
		node *p = new node;
		p->key = key;
		p->next = NULL;
		if (L.head == NULL)
			L.head = p;
		else
		{
			p->next = L.head;
			L.head = p;
		}
	}
}

void _delete(_list &L, int key) 
{
	if (_find(L, key))
	{
		if (L.head->key == key)
		{
			node *p = L.head;
			L.head = L.head->next;
			delete p;
		}
		else
		{
			node *p;
			for (p = L.head; p->next->key != key; p = p->next);
			node *del = p->next;
			p->next = del->next;
			delete del;
		}
	}
}

int main()
{
	int n, op, key;
	Read(n);
	for (int i = 1; i <= n; i++)
	{
		Read(op), Read(key);
		if (op == 1)
			push(H[key % NMAX], key);
		else if (op == 2)
			_delete(H[key % NMAX], key);
		else
			out << _find(H[key % NMAX], key) << "\n";
	}
	out.close();
	return 0;
}