Cod sursa(job #953174)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 25 mai 2013 09:57:22
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include<fstream>
using namespace std;
const int MAXN=100001;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

typedef struct list_node
{
	int value;
	list_node *next;
	void init()
	{
		value=0;
		next=NULL;
	}
}hash_node;

hash_node *h[MAXN];
int n,k;

int hash_func(int x)
{
	static const double y=0.6180339887;
	static const int m=666013;
	int key=int((m*(x*y-int(x*y))))%MAXN;
	return key;
}
void hash_insert(int x)
{
	int key=hash_func(x);
	hash_node *curr;
	if (h[key]==NULL)
	{
		h[key]=new hash_node;
		h[key]->init();
	}
	curr=new hash_node;	curr->init();
	curr->value=x;
	curr->next=h[key]->next;
	h[key]->next=curr;
}
void hash_delete(int x)
{
	int key=hash_func(x);
	hash_node *curr=NULL,*aux=NULL;
	if (h[key]==NULL)
		return;
	for (curr=h[key]->next,aux=h[key];curr!=NULL && (curr->value!=x);curr=curr->next,aux=aux->next);
	if (curr!=NULL)
	{
		aux->next=curr->next;
		delete curr;
	}
}
int hash_search(int x)
{
	int key=hash_func(x);
	hash_node *curr;
	for (curr=h[key];curr!=NULL && (curr->value!=x);curr=curr->next);
	return (curr!=NULL);
}
int main()
{
	int op,x;
	fin>>n;
	for (k=1;k<=n;++k)
	{
		fin>>op>>x;
		switch(op)
		{
		case 1:
			hash_insert(x);
			break;
		case 2:
			hash_delete(x);
			break;
		case 3:
			fout<<hash_search(x)<<'\n';
			break;
		}
	}
	fin.close();
	fout.close();
	return 0;
}