Cod sursa(job #495256)

Utilizator freak93Adrian Budau freak93 Data 24 octombrie 2010 16:41:54
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<fstream>

using namespace std;

const char iname[]="hashuri.in";
const char oname[]="hashuri.out";
const int hs=2015177;
const int p1=1726943;
const int p2=1870667;

ifstream f(iname);
ofstream g(oname);

int H[hs],n,x,t;

inline bool find(int x)
{
    int h1=((long long)x*(long long)p1)%hs;
    int h2=((long long)x*(long long)p2)%hs;
    return H[h1]==x||H[h2]==x;
}

inline void erase(int x)
{
    int h1=((long long)x*p1)%hs;
    if(H[h1]==x)
    {
        H[h1]=0;
        return;
    }
    int h2=((long long)x*p2)%hs;
    H[h2]=0;
}

inline void insert(int x)
{
    int h1=((long long)x*p1)%hs;
    if(H[h1]==0)
    {
        H[h1]=x;
        return;
    }
    do
    {
        int h2=((long long)x*p2)%hs;
        if(H[h2]==0)
        {
            H[h2]=x;
            return;
        }
        int aux=H[h2];
        H[h2]=x;
        x=aux;
    }while(1);
}

int main()
{
    f>>n;
    while(n--)
    {
        f>>t>>x;
        switch(t)
        {
            case 1: if(find(x)==false) insert(x);break;
            case 2: if(find(x)==true) erase(x);break;
            default: g<<(int)find(x)<<"\n";
        }
    }
}