Pagini recente » Cod sursa (job #1272584) | Cod sursa (job #24469) | Cod sursa (job #403218) | Cod sursa (job #348844) | Cod sursa (job #2885691)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream in("hashuri.in");
ofstream out("hashuri.out");
/*
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.
*/
#define k 666013
//int k= 666013;
vector<int> myhash[k+5];
int cautare_cheie(int x)
{
int clasa = x % k;
for(int i = 0; i< myhash[clasa].size(); i++)
{
if(myhash[clasa][i] == x)
{
return 1;
}
}
return 0;
}
int main()
{
int n, operatie, nr, poz, x,clasa;
int found = 0;
in>>n;
for(int i=1; i<=n; i++)
{
in>>operatie;
in>>nr;
if(operatie == 1)
{
clasa = x % k;
if(cautare_cheie(nr)==0)
{
myhash[clasa].push_back(nr);
}
}
else if (operatie == 2)
{
clasa = x% k;
int found = 0;
for(int i=0;i<myhash[clasa].size();i++)
{
if(myhash[clasa][i] == nr)
{
found = 1;
poz =i;
}
}
if(found == 1)
{
myhash[clasa].erase(myhash[clasa].begin() + poz);
}
}
else if (operatie == 3)
{
int found = 0;
clasa = x%k;
for(int i = 0; i< myhash[clasa].size();i++)
{
if(myhash[clasa][i]==nr)
{
found =1;
break;
}
}
out<<found<<'\n';
}
}
return 0;
}