Cod sursa(job #911174)

Utilizator mihai10stoicaFMI - Stoica Mihai mihai10stoica Data 11 martie 2013 13:17:27
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include<cstdio>
#define mod1 66601
#define mod2 39199
class HashTab
{
    int H[mod1];
    public:
        HashTab();
        void insert(int ,int );
        void remove(int );
        int find(int );
};
HashTab::HashTab()
{
    for(int i=0;i<mod1;i++)
        H[i]=0;
}
void HashTab::insert(int x,int ex=0)
{
    int pos=x%mod1;
    if(ex!=0 && H[pos]==ex) pos=x%mod2;
    if(H[pos]==0 || H[pos]==x)
    {
        H[pos]=x;
        return;
    }
    else
    {
        int y=H[pos];
        H[pos]=x;
        insert(y,x);
    }
}
void HashTab::remove(int x)
{
    int pos;
    pos=x%mod1;if(H[pos]==x) H[pos]=0;
    pos=x%mod2;if(H[pos]==x) H[pos]=0;
}
int HashTab::find(int x)
{
    if(H[x%mod1]==x || H[x%mod2]==x) return 1;
    return 0;
}
int main()
{
    FILE *f=fopen("hashuri.in", "r"),*g=fopen("hashuri.out", "w");
    HashTab Hash;
    int n,i,op,x;
    fscanf(f,"%d",&n);
    for(i=0;i<n;i++)
    {
        fscanf(f,"%d%d",&op,&x);
        if(op==1) Hash.insert(x);
        else if(op==2) Hash.remove(x);
        else if(op==3) fprintf(g,"%d\n",Hash.find(x));
    }
    return 0;
}