Cod sursa(job #807259)

Utilizator mariacMaria Constantin mariac Data 4 noiembrie 2012 14:51:06
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<stdio.h>
#include <iostream>
#define mod 666013
using namespace std;

int n,op;
long long x;
struct nod
{
	long long inf;
	nod *next;
};
typedef nod *lista;

lista l[mod];

void add(long long k)
{
	lista p,aux;
	int ok;
	ok=1;
	for(p=l[k%mod];p&&ok;p=p->next)
		if(p->inf==k)ok=0;
	if(ok)
	{
		aux=new nod;
	    aux->inf=k;
		aux->next=l[k%mod];
		l[k%mod]=aux;
	}
		  
}

void remove(long long k)
{ 
	lista p,aux;
	p=l[k%mod];
	if(p)
	{
		if(p->inf==k)
		  {
		   l[k%mod]=p->next;
		   delete p;
		 }
	   
		  else {	
				  while(p->next&&p->next->inf!=k)
						p=p->next;
				  if(p->next)
					{
						aux=p->next;
						p->next=aux->next;
						delete aux;
		
					}
				}
	}
}

int find(long long k)
{
	lista p;
	for(p=l[k%mod];p;p=p->next)
		if(p->inf==k)return 1;
	return 0;
}

		

int main()
{
	FILE *f=fopen("hashuri.in","r");
	FILE *fi=fopen("hashuri.out","w");
	
	fscanf(f,"%d",&n);
	for(int i=0;i<mod;i++)l[i]=NULL;
	for(int i=1;i<=n;i++)
	{   fscanf(f,"%d %lld",&op,&x);
		switch(op)
		{   
			case 1:add(x);break;
			case 2:remove(x);break;
			case 3:fprintf(fi,"%d\n",find(x));break;
		}
	}
	return 0;
}