Cod sursa(job #495906)

Utilizator ZethpixZethpix Zethpix Data 27 octombrie 2010 10:32:39
Problema Hashuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>

long N,i,op,x,m;

struct list
{
	long nod;
	list *link;
}*H[5000000];

void addnum(long x)
{
	list *p;
	int ok=0;
	p=H[x%m];
	while(p!=NULL)
	{
		if(p->nod==x)
		{
			ok=1;
			break;
		}
		p=p->link;
	}
	if(ok==0)
	{
		p=new list;
		p->nod=x;
		p->link=H[x%m];
		H[x%m]=p;
	}
}

void delnum(long x)
{
	list *p,*q;
	int ok;
	p=H[x%m];
	q=NULL;
	while(p!=NULL)
	{
		if(p->nod==x)
		{
			ok=1;
			break;
		}
		q=p;
		p=p->link;
	}
	if(ok==1)
		if(q!=NULL)
		{
			p=q->link->link;
			q->link=p;
		}
		else
			H[x%m]=p->link;
}

int solnum(long x)
{
	list *p;
	int ok=0;
	p=H[x%m];
	while(p!=NULL)
	{
		if(p->nod==x)
		{
			ok=1;
			break;
		}
		p=p->link;
	}
	return ok;
}

int main()
{
	freopen("hashuri.in","r",stdin);
	freopen("hashuri.out","w",stdout);
	
	scanf("%ld",&N);
	m=4939273;
	for(i=1;i<=N;i++)
	{
		scanf("%d%d",&op,&x);
		if(op==1) addnum(x);
		else
		if(op==2) delnum(x);
		else
		if(op==3) printf("%d\n",solnum(x));
	}
	
	return 0;
}