Pagini recente » Cod sursa (job #2066749) | Cod sursa (job #2071876) | Cod sursa (job #1715743) | Cod sursa (job #2173869) | Cod sursa (job #1503735)
/*Hashuri
Fie o multime de numere naturale initial vida. Asupra acestei multimi se efectueaza operatii de urmatoarele tipuri:
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.
Date de intrare
Fişierul de intrare hashuri.in contine pe prima linie numarul N de operatii efectuate. Fiecare din urmatoarele N linii
contine o pereche de numere naturale (op x), unde op este numarul operatiei care se efectueaza (de la 1 la 3), iar x
este parametrul operatiei.
Date de ieşire
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.
Restricţii
3 ≤ N ≤ 1.000.000
Fiecare operatie are un parametru numar natural din intervalul [1, 2.000.000.000]*/
#include <vector>
#include <fstream>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
const int prim=666013;
int n,val,com,loc;
vector <int> a[prim];
int verifica()
{
for(int i=0;i<(int)a[loc].size();i++)
if(a[loc][i]==val) return i;
return -1;
}
void adauga()
{
if(verifica()==-1) a[loc].push_back(val);
}
void sterge()
{
int i=verifica();
if(i!=-1) a[loc].erase(a[loc].begin()+i);
}
int main()
{
f>>n;
for(int i=0;i<n;i++)
{
f>>com>>val;
loc=val%prim;
if(com==1) adauga();
if(com==2) sterge();
if(com==3)
{
g<<(verifica()!=-1)<<'\n';
}
}
return 0;
}