Cod sursa(job #244903)

Utilizator AndreyPAndrei Poenaru AndreyP Data 16 ianuarie 2009 12:21:57
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<stdio.h>
#define M 666013
int n;
int op,x;
struct list
{
	int x;
	list *next;
};
list *a[M];
inline void add(int unde)
{
	list *aux=new list;
	aux->next=a[unde];
	aux->x=x;
	a[unde]=aux;
}
list *find(int unde)
{
	list *y=a[unde];
	for(list *y=a[unde]; y->next!=NULL; y=y->next)
	{
		if(y->next->x==x)
			return y;
	}
	return NULL;
}
inline void insert()
{
	int unde=x%M;
	if(a[unde]==NULL)
	{
		add(unde);
		return;
	}
	if(a[unde]->x==x)
		return;
	if(find(unde)!=NULL)
		add(unde);
}
inline void sterge()
{
	int unde=x%M;
	if(a[unde]==NULL)
		return;
	if(a[unde]->x==x)
	{
		list *aux=a[unde];
		a[unde]=a[unde]->next;
		delete aux;
		return;
	}
	list *aux=find(unde);
	if(aux!=NULL)
	{
		list *aux1=aux->next;
		aux->next=aux->next->next;
		delete aux1;
	}
}
int main()
{
	freopen("hashuri.in","r",stdin);
	freopen("hashuri.out","w",stdout);
	for(scanf("%d",&n); n; --n)
	{
		scanf("%d%d",&op,&x);
		if(op==1)
		{
			insert();
			continue;
		}
		if(op==2)
		{
			sterge();
			continue;
		}
		int unde=x%M;
		if(a[unde]==NULL)
		{
			fputs("0\n",stdout);
			continue;
		}
		if(a[unde]->x==x)
		{
			fputs("1\n",stdout);
			continue;
		}
		if(find(unde)==NULL)
			fputs("0\n",stdout);
		else
			fputs("1\n",stdout);
	}
	return 0;
}