Cod sursa(job #1368555)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 2 martie 2015 18:29:58
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

const int NIL = -1;
const int EMPTY = 0;

const int MOD = (1 << 21) - 1;

int table[MOD + 1];

int F(const int x)
{
    return x & MOD;
}

int nextPos(int pos)
{
    return (pos + 1) & MOD;
}

int getPos(const int x)
{
    int pos = F(x);

    while ( table[pos] != EMPTY && table[pos] != x )
        pos = nextPos(pos);

    return pos;
}

int find(const int x)
{
    return (table[ getPos(x) ] == x);
}

void erase(const int x)
{
    int p = getPos(x);

    if ( table[p] == x )
        table[p] = NIL;
}

void insert(const int x)
{
    table[ getPos(x) ] = x;
}

int main()
{
    ifstream in("hashuri.in");
    ofstream out("hashuri.out");

    ios_base::sync_with_stdio( false );

    int N;

    for ( int i = 0; i <= MOD; ++i )
        table[i] = EMPTY;

    in >> N;

    while ( N-- )
    {
        int tip, x;

        in >> tip >> x;

        switch(tip)
        {
            case 1: insert(x); break;
            case 2: erase(x); break;
            case 3: out << find(x) << "\n"; break;

            default: cerr << "Error\n";
        }
    }

    return 0;
}