Pagini recente » Cod sursa (job #1062400) | Cod sursa (job #904922) | Cod sursa (job #2852357) | Cod sursa (job #3290321) | Cod sursa (job #2906562)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int parametruDispersie = 1000007;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
vector<int> h[1000007];
int N;
// operatia de tipul 1: se adauga elementul x la multime (unde x este un parametru al operatiei). Daca x este deja in multime, atunci aceasta ramane neschimbata.
// operatia de tipul 2: se sterge elementul x, daca acesta este deja in multime. In caz contrar, multimea ramane neschimbata.
// operatia de tipul 3: returneaza 1 daca si numai daca x este in multime, iar in caz contrar returneaza 0
// Fişierul de ieşire hashuri.out va contine un numar de linii egal cu numarul de operatii de tipul 3 din fisierul de intrare.
// Pe fiecare linie se va afla raspunsul returnat de operatia corespunzatoare.
bool inHash(int value){
int cod_dispersie = value % parametruDispersie;
for(auto x: h[cod_dispersie]){if(x == value) return true;}
return false;
}
void insertInHash(int value)
{
int cod_dispersie = value % parametruDispersie;
if(inHash(value) == false) h[cod_dispersie].push_back(value);
}
void removeFromHash(int value){
int cod_dispersie = value % parametruDispersie;
for(int i = 0; i < h[cod_dispersie].size(); ++i){
if(h[cod_dispersie][i] == value){
h[cod_dispersie].erase(h[cod_dispersie].begin() + i);
return;
}
}
}
int main(){
int cod, value;
fin>>N;
for(int i = 0; i < N; ++i){
fin>>cod;
fin>>value;
if(cod == 1){
insertInHash(value);
}
if(cod == 2){
removeFromHash(value);
}
if(cod == 3){
if(inHash(value)) fout<<"1\n";
else fout<<"0\n";
}
}
return 0;
}