Cod sursa(job #1408805)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 30 martie 2015 11:35:52
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <vector>
#define nmax 666013

using namespace std;

int n;
int tip, x;
vector <int> HASH[nmax];

void adauga(int value)
{
    int index = value % nmax;
    bool ok = true;
    for (int i = 0; i < HASH[index].size(); i++)
        if (HASH[index][i] == value)
        {
            ok = false;
            break;
        }
    if (ok)
        HASH[index].push_back(value);
}

void sterge(int value)
{
    int index = value & nmax;
    for (vector <int> :: iterator it = HASH[index].begin(); it != HASH[index].end(); ++it)
        if (*it == value)
        {
            HASH[index].erase(it);
            break;
        }
}

bool check(int value)
{
    int index = value % nmax;
    for (int i = 0; i < HASH[index].size(); i++)
        if (HASH[index][i] == value)
            return 1;
    return 0;
}

int main()
{
    
    ifstream fi("hashuri.in");
    ofstream fo("hashuri.out");
    
    fi >> n;
    
    for (int i = 1; i <= n; i++)
    {
        fi >> tip >> x;
        switch (tip)
        {
            case 1:
                // ss adauga x in multime
                adauga(x);
                break;
            case 2:
                // se sterge x din multime
                sterge(x);
                break;
            case 3:
                // interogare, este x sau nu in multime
                fo << check(x) << "\n";
                break;
        }
    }
    
    fi.close();
    fo.close();
    
    return 0;
}