Cod sursa(job #904827)

Utilizator marialivia16Chiorean Maria Livia marialivia16 Data 4 martie 2013 21:21:08
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<cstdio>
#include<cstdlib>
#include<iostream>
#define mod 131147
#define inf 0
using namespace std;
int h1(int x)
{
    return x%mod;
}
int h2(int x)
{
    return abs(x/mod)%mod;
}
int Cautare(int x,int H1[150000], int H2[150000])
{
    if(H1[h1(x)]==x || H2[h2(x)]==x)
    return 1;   //a fost gasit
    return 0;
}
void Inserare(int x,int max,int H1[15000],int H2[150000])
{
    int aux;
    if(Cautare(x,H1,H2)==1) return;
    while(max)
    {
              if(H1[h1(x)]==inf) {H1[h1(x)]=x;return;}
              aux=x;x=H1[h1(x)];H1[h1(x)]=aux;
              if(H2[h2(x)]==inf) {H2[h2(x)]=x;return;}
              aux=x;x=H2[h2(x)];H2[h2(x)]=aux;
              max--;
    }
    Inserare(x,max,H1,H2);
}
void Stergere(int x,int H1[150000],int H2[150000])
{
     if(Cautare(x,H1,H2)==0) return;
     if(H1[h1(x)]==x) H1[h1(x)]=inf;
     if(H2[h2(x)]==x) H2[h2(x)]=inf;
}
int main()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    int n,i,j,H1[150000],H2[150000],a,nr;
    for(int i=0;i<mod;i++)
     {H1[i]=inf;H2[i]=inf;}
    cin>>n;
    for(i=1;i<=n;i++)
	{
		cin>>nr>>a;
		if(nr==1)
                 Inserare(a,n,H1,H2);
		if(nr==2)
                 Stergere(a,H1,H2);
        if(nr==3)
		         cout<<Cautare(a,H1,H2)<<endl;
	}
    return 0;
}