Cod sursa(job #496028)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 27 octombrie 2010 16:45:20
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
 
struct point 
{ 
	int inf; 
	point *leg; 
}; 
 
 
point *u,*q,*a[1000000],*p,*pp,*qq; 
int n,i,nr,x,op; 
 
 
int caut(int q,int qqq) 
{ 
	qq=a[q%(qqq+1)]; 
	while (qq)  
	{ 
		if (qq->inf==q) return 1; 
        qq=qq->leg; 
    } 
   
	return 0; 
} 
     
 
    
 
    
 void ins(int q,int qqq) 
 { 
	p=new point; 
	p->inf=q; 
	p->leg=a[q%(qqq+1)]; 
	a[q%(qqq+1)]=p;

	/*if (a[q%qqq]!=NULL) 
	p->leg=a[q%qqq]; 

	a[q%qqq]=p; */
} 
 
 
    
void sterge(int q,int qqq) 

{ 
	qq=a[q%(qqq+1)]; 
	
	//if (qq==NULL) return; 
	
	if (qq->inf==q) 
	{
		a[q%(qqq+1)]=a[q%(qqq+1)]->leg;
		return;
	}
	
	
	/*while (qq&&qq->inf!=q) qq=qq->leg; 

	if (qq) qq->inf=0; */
	while(qq->leg)
	{
		if(qq->leg->inf==q){qq->leg=qq->leg->leg;return;}
		qq=qq->leg;
	}
 
} 
 
 
 
    
int main() 
{ 
freopen("hashuri.in","r",stdin); 
freopen("hashuri.out","w",stdout); 
 
scanf("%d",&n); 
     
for (i=1;i<=n;i++)
	a[i]=NULL;
 
for (i=1;i<=n;i++) 
{ 
	scanf("%d%d",&op,&x); 
	if (op==1)  
		if ((caut(x,n%999983))==0) 
			ins(x,n%999983); 
 
	if (op==2)  
		if (caut(x,n%999983)==1) sterge(x,n%999983); 
	if (op==3) 
		//if (caut(x,n%999983)==1) printf("1\n"); 
                   // else printf("0\n");  
		printf("%d\n",caut(x,n%999983)==1);

}    
 
return 0; 
}