Cod sursa(job #785356)

Utilizator batistaUPB-Oprea-Cosmin-Dumitru batista Data 8 septembrie 2012 15:54:36
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#define P 666013
using namespace std;
struct nod{int info;nod*adr;}*v[P],*p,*q;
int n,i,op,nr;
void insereaza(int nr)
{int x=nr%P;
	p=new nod;
	p->info=nr; p->adr=v[x]; v[x]=p;
}

void sterge(int nr)
{int x=nr%P;
	nod*cp=v[x];
	if(!v[x])return ;
	if(v[x]->info){ v[x]=0;return ; }
	while(v[x]->adr)
	{
	  if(v[x]->adr->info==nr)
		if(v[x]->adr->adr)
		{
		  q=v[x]->adr->adr;
		  delete(v[x]->adr);
		  v[x]->adr=q;
		}
		else
		{
		 delete(v[x]->adr);
		 v[x]->adr=0;
		}
		v[x]=v[x]->adr;
	}
	v[x]=cp;
}

int cauta(int nr)
{int x=nr%P,gasit=0;
	p=v[x];
	while(p)
	{
		if(p->info==nr){gasit=1;break;}
		p=p->adr;
	}
  return gasit;
}
int main()//insereaza,sterge,verifica daca exista nr....nr<=2000.000.000
{
	ifstream f("hashuri.in");ofstream g("hashuri.out");
	f>>n;
	for(i=1;i<=n;i++)
	{
		f>>op>>nr;
		if(op==1)insereaza(nr); else
		if(op==2)sterge(nr); else
		if(op==3)g<<cauta(nr)<<'\n'; 
	}
   f.close();g.close();
return 0;}