Cod sursa(job #2005690)

Utilizator horiacoolNedelcu Horia Alexandru horiacool Data 27 iulie 2017 20:12:41
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <list>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
#define P1 16381
#define P2 16369
list <int> H1[P1+3],H2[P2+3];
int N,op,x;

void InserareHash(int key)
{
    int ad1,ad2;
    ad1 = key % P1;
    ad2 = key % P2;

    if( H1[ad1].size() < H2[ad2].size() )
        H1[ad1].push_back(key);
    else
        H2[ad2].push_back(key);
}

void StergereHash(int key)
{
    int ad1,ad2;
    ad1 = key % P1;
    ad2 = key % P2;

    for( list<int>::iterator it = H1[ad1].begin() ; it != H1[ad1].end() ; it++)
         if( *it == key )
         {
             H1[ad1].erase(it);
             return;
         }
    for( list<int>::iterator it = H2[ad2].begin() ; it != H2[ad2].end() ; it++)
         if( *it == key )
         {
             H2[ad2].erase(it);
             return;
         }
}

bool CautareHash(int key)
{
    int ad1,ad2;
    ad1 = key % P1;
    ad2 = key % P2;

    for( list<int>::iterator it = H1[ad1].begin() ; it != H1[ad1].end() ; it++)
         if( *it == key )
             return 1;
    for( list<int>::iterator it = H2[ad2].begin() ; it != H2[ad2].end() ; it++)
         if( *it == key )
             return 1;
    return 0;
}

int main()
{
    f>>N;
    for(int i = 1 ; i <= N ; i++)
    {
        f>>op>>x;

        switch(op)
        {
           case 1 : InserareHash(x); break;
           case 2 : StergereHash(x); break;
           case 3 : g<<CautareHash(x)<<'\n'; break;
        }
    }
    return 0;
}