Cod sursa(job #331866)

Utilizator AnDrEwBoYA Andrei AnDrEwBoY Data 15 iulie 2009 15:07:18
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include<stdio.h>

#define MAX_N 565207
#define h(m) m % MAX_N

struct nod 
{
	int val;
	nod* next;
} *nods[MAX_N];

void read(),add(int),del(int);
int exists(int);

int n;

int main()
{
	freopen("hashuri.in","r",stdin);
	freopen("hashuri.out","w",stdout);
	
	read();
	 
	fclose(stdin); fclose(stdout);
	return 0;
}

void read()
{
	int op,x;
	scanf("%d",&n);
	for(int i = 0; i < n; i++)
	{
		scanf("%d%d",&op,&x);
		switch(op)
		{
			 case 1: add(x);                   break;
		     case 2: del(x);                   break;
		     case 3: printf("%d\n",exists(x)); break; 
		}		 
	}
}

int exists(int x)
{
   nod* curr = nods[h(x)];
   while(curr)
   {
	   if(curr->val == x) return 1;
	   curr = curr->next;
   }
   return 0;
}

void del(int x)
{
    nod *curr = nods[h(x)];
	if(curr && curr->val == x)
	{
		nods[h(x)] = curr->next; 
	    delete(curr);        
	}  
	else
	{
		for(;curr; curr = curr->next)
		{
			if(curr->next && curr->next->val == x)
			{
				nod *tmp = curr->next;
				curr->next = tmp->next;
				delete(tmp);
				break;
			}
		}
	}
}

void add(int x)
{
	if(!exists(x))
	{
		nod* New = new nod;
		New->val = x;
		New->next = nods[h(x)];
		nods[h(x)] = New;
	}		
}