Cod sursa(job #894501)

Utilizator BabutaRaresBabuta Rares Mihai BabutaRares Data 26 februarie 2013 21:40:22
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include<stdio.h>
#define M 6613
FILE *f=fopen("hashuri.in","r");
FILE *g=fopen("hashuri.out","w");
typedef struct nod{int x;nod *urm,*ant;}NOD;
typedef struct {bool ok;NOD *prim,*ultim;}HASH;
HASH v[M];
NOD *p;
int i,j,n,ok,x;
void adaugare(int x)
{
	p=new NOD;
	p->x=x;
	if(v[x%M].ultim==NULL)
	{
		v[x%M].ultim=v[x%M].prim=p;
		v[x%M].ultim->ant=NULL;
		v[x%M].prim->ant=NULL;
	}
	else
	{
		v[x%M].ultim->urm=p;
		p->ant=v[x%M].ultim;
		v[x%M].ultim=p;
	}
	v[x%M].ultim->urm=NULL;
	v[x%M].ok=1;
}
void stergere(int x)
{
	p=new NOD;
	p=v[x%M].prim;
	for(p;p!=NULL;p=p->urm)
	{
		if(p->x==x)
		{
			if(p!=v[x%M].prim)
			{
			p->ant->urm=p->urm;
			p->urm->ant=p->ant;
			}
			delete p;
		}
	}
}
int cautare(int x)
{
	p=new NOD;
	p=v[x%M].prim;
	for(p;p!=NULL;p=p->urm)
		if(p->x==x)
			return 1;
	return 0;
}
int main()
{
	fscanf(f,"%d",&n);
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%d" "%d",&ok,&x);
		if(ok==1)
			adaugare(x);
		if(ok==2)
			if(v[x%M].ok==1)
			stergere(x);
		if(ok==3)
			if(v[x%M].ok==0)
				fprintf(g,"0\n");
			else				
				fprintf(g,"%d\n",cautare(x));
	}
}