Cod sursa(job #251341)

Utilizator omu_salcamtache tudor omu_salcam Data 2 februarie 2009 12:53:17
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 2.16 kb
#include<stdio.h>
struct nod{
	int val;
	nod *adr;
};
FILE *f1,*f2;
long a,b,c,d,i,j,n,m;
nod *v[666015],*p,*pp,*aux,*s;
int main(){
	f1=fopen("hashuri.in","r");
	f2=fopen("hashuri.out","w");
	fscanf(f1,"%ld",&n);
	for(i=1;i<=n;i++){
		fscanf(f1,"%ld%ld",&a,&b);
		if(a==1){
			p=v[b%666013];
			if(p==NULL){
				v[b%666013]=new nod;
				v[b%666013]->val=b;
				v[b%666013]->adr=NULL;
			}
			else{
				if(p->val==-1){
					p->val=b;
				}
				else{
					c=1;
					while(c&&p->adr!=NULL){
						p=p->adr;
						if(p->val==b){
							c=0;
						}
					}
					if(c){
						aux=new nod;
						aux->val=b;
						aux->adr=NULL;
						p->adr=aux;
					}
				}
			}
		}
		if(a==2){
			p=v[b%666013];
			if(p->val==b){
				if(p->adr!=NULL){
					s=v[b%666013]->adr;
					v[b%666013]->val=s->val;
					v[b%666013]->adr=v[b%666013]->adr->adr;
					delete s;
				}
				else{
					p->val=-1;
					p->adr=NULL;
				}
			}
			if(p->adr!=NULL){
				pp=p->adr;
				c=1;
				d=1;
				while(c&&d){
					if(pp->val==b){
						c=0;
					}
					else{
						p=pp;
						if(pp->adr!=NULL){
							pp=pp->adr;
						}
						else{
							d=0;
						}
					}
				}
				if(d&&!c){
					s=pp;
					p->adr=pp->adr;
					delete s;
				}
			}
			/*
			p=v[b%125000003];
			c=1;
			if(p!=NULL){
				pp=p;
				p=p->adr;
				if(p!=NULL){
					if(p->val==b){
						c=0;
					}
				}
				else{
					v[b%125000003]->val=-1;
					c=0;
				}
				if(c){
					while(c&&p->adr!=NULL){
						if(p->val==b){
							c=0;
						}
						p=p->adr;
					}
				}
				if(c){
					if(p!=v[b%125000003]){
						s=pp->adr;
						pp->adr=p->adr;
						delete s;
					}
					else{
						s=v[b%125000003]->adr;
						v[b%125000003]=s;
						delete s;
					}
				}
			}
			*/
		}
		if(a==3){
			p=v[b%666013];
			c=1;
			if(p!=NULL){
				while(c&&p->adr!=NULL){
					p=p->adr;
					if(p!=NULL){
						if(p->val==b){
							c=0;
						}
					}
				}
				if((p->val==b)||(c==0&&p->val!=-1)){
					fprintf(f2,"1\n");
				}
				else{
					fprintf(f2,"0\n");
				}
			}
			else{
				fprintf(f2,"0\n");
			}
		}
	}
	return 0;
}