Cod sursa(job #254058)

Utilizator andreea_mandreea martinovici andreea_m Data 6 februarie 2009 17:49:13
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<stdio.h>
#define N 666013
struct nod
{
	int info;
	nod *adr;
}*v[N];
void adauga_sf(nod*u,int x)
{
	nod *aux=new nod;
	aux->info=x;
	aux->adr=NULL;
	u->adr=aux;
}

void adauga(nod*p,int x)
{
	while(p->adr)
	{
		if(p->adr->info==x)
			return;
		p=p->adr;
	}
	adauga_sf(p,x);
}

void creare()
{
	for(int i=0;i<N;i++)
	{
		v[i]=new nod;
		v[i]->adr=NULL;
	}
}
nod * cauta(nod *p, int x)
{
	while(p->adr && p->adr->info!=x)
		p=p->adr;
	if(p->adr!=NULL)
		return p;
	return NULL;
}
/*
void adauga(nod *p, int x)
{
	nod*q=cauta(p,x);
	if(q!=NULL)
		return;
	q=new nod;
	q->info=x;
	q->adr=p->adr;
	p->adr=q;
}
*/
void sterge(nod *p,int x)
{
	nod *q=cauta(p,x);
	
	if(q==NULL)
		return;
	nod *aux=q->adr;
	q->adr=aux->adr;
	delete aux;
}
void afisare(int x)
{
	nod *p=v[x];
	p=p->adr;
	printf("lista lui %d: ",x);
	while(p)
	{
		printf("%d",p->info);
		p=p->adr;
	}
	printf("\n");
}
int main()
{
	freopen("hashuri.in","r",stdin);
	freopen("hashuri.out","w",stdout);
	int op,x,n;
	scanf("%d",&n);
	creare();
	while(n--)
	{
		scanf("%d%d",&op,&x);
		if(op==1)
			adauga(v[x%N],x);
		if(op==2)
			sterge(v[x%N],x);
		if(op==3)
			printf("%d\n",cauta(v[x%N],x)==NULL ? 0 : 1);
		//afisare(x%N);
	}
	return 0;
}