Cod sursa(job #250185)

Utilizator omu_salcamtache tudor omu_salcam Data 30 ianuarie 2009 12:35:12
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include<stdio.h>
struct nod{
	int val;
	nod *adr;
};
FILE *f1,*f2;
long a,b,c,i,j,n,m;
nod *v[125000003],*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%125000003];
			if(p==NULL){
				v[b%125000003]=new nod;
				v[b%125000003]->val=b;
				v[b%125000003]->adr=NULL;
			}
			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;
					p->adr=aux;
				}
			}
		}
		if(a==2){
			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%125000003];
			c=1;
			if(p!=NULL){
				while(c&&p->adr!=NULL){
					p=p->adr;
					if(p!=NULL){
						if(p->val==b){
							c=0;
						}
					}
				}
				if(c&&p->val!=-1){
					fprintf(f2,"1\n");
				}
				else{
					fprintf(f2,"0\n");
				}
			}
			else{
				fprintf(f2,"0\n");
			}
		}
	}
	return 0;
}