Cod sursa(job #904793)

Utilizator marialivia16Chiorean Maria Livia marialivia16 Data 4 martie 2013 20:57:07
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include<cstdio>
#include<cstdlib>
#include<iostream>
#define mod 666013
#define inf 0
using namespace std;
void Initializare(int v[mod])
{
     for(int i=0;i<=mod;i++)
     v[i]=inf;
}
//void Afisare(int v[mod],int n)
//{
//     for(int i=0;i<=n;i++)
//     if(v[i]!=inf)
//             cout<<i<<": "<<v[i]<<endl;
//     else
//         cout<<i<<": -"<<endl;
//}
int h1(int x)
{
    return x%mod;
}
int h2(int x)
{
    return abs(x/mod)%mod;
}
int Cautare(int x,int H1[mod], int H2[mod])
{
    if(H1[h1(x)]==x || H2[h2(x)]==x)
    return 1;   //a fost gasit
    return 0;
}
void Inserare(int x,int max,int H1[mod],int H2[mod])
{
    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[mod],int H2[mod])
{
     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[mod],H2[mod],a,nr;
    Initializare(H1);
    Initializare(H2);
    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;
	}
    //cout<<endl;Afisare(H1,mod);
//    Afisare(H2,mod);
    return 0;
}