Cod sursa(job #1756144)

Utilizator sulzandreiandrei sulzandrei Data 11 septembrie 2016 22:30:27
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 2.44 kb
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_set>
#include <ctime>
#include <cstdlib>
#include <fstream>
using namespace std;
#define ll long long int
#define pb push_back
ifstream in ("hashuri.in");
ofstream out("hashuri.out");
const int M  =195931;
const float A = 0.6180339887;
vector<int> v[M];
//--------------------------------
// Functiile pt dispersie universala
//-------------------------------
const int maxByte = ( 1 << 8 )-1;
const int byteNr = sizeof(int);
int getRandom()
{
    return rand()%M;
}
int getIthByte(int &n,int &i)
{
    return  ( n >> ( i * 8) ) & maxByte;
}
int getSum(int &x)
{
    int hx = 0;
    for(int i = 0 ; i < byteNr; i++)
        hx += getRandom() * getIthByte(x,i);
    return hx % M;
}
int H(int k )
{

    //return getSum(k);                                 //dispersie universala 30pct
    //return trunc(M*fmod(k*A,1));                    //metoda inmultirii 100pct
    //return k % M;                                   //metoda diviziunii 100pct
}

void add(int &e)//adaugam elementul in multime
{
    int hx = H(e);
    if ( find(v[ hx ].begin(),v[hx].end(),e) != v[ hx].end())
        return;
    v[ hx ].pb(e);
}
void erase(int &e)//stergem elementul din multime
{
    int hx = H(e);
    if (find(v[ hx  ].begin(),v[hx ].end(),e) != v[ hx ].end())
        v[ hx ].erase(find(v[ hx  ].begin(),v[hx ].end(),e));
}
int find(int &e)//returnam 1 daca este in multime sau 0 altfel
{
    int hx = H(e);
    if (find(v[ hx  ].begin(),v[hx ].end(),e) !=v[hx ].end())
        return 1;
    return 0;
}
int main()
{
    int n,x,op;
    in >> n;
    for(int i = 0 ; i < n ; i++)
    {
        in >> op >> x;
        switch(op)
        {
            case 1:
                //openAadd(x);//hash cu adresare deschisa
                //addMy(x);  //hash cu dispersie fara vectori din stl
                add(x);    //hash cu dispersie cu vectori din stl
                //addTree(x);//arbori binari de cautare echilibrati
             break;
            case 2:
                //openAdel(x);
                //removeMy(x);
                erase(x);
                //removeTree(x);
            break;
            case 3:
                //out<<openAsearch(x)<<'\n';
                //out<<findMy(x)<<'\n';
                out<<find(x)<<'\n' ;
                //out<<isInTree(x)<<'\n';
            break;
        }
    }
    return 0;
}