Pagini recente » Cod sursa (job #1481170) | Cod sursa (job #1315351) | Cod sursa (job #798739) | Cod sursa (job #728099) | Cod sursa (job #2741020)
#include <iostream>
#include <fstream>
#define MOD 666013 // primul nr prim dupa un milion
using namespace std;
ifstream fin("input.txt");
ofstream fout("hashuri.out");
struct nod
{
int val;
nod* urm;
};
nod *buckets[MOD];
int exista(int value)
{ if(buckets[value % MOD] == nullptr)
return 0;
nod *cap = buckets[value % MOD];
while(cap != nullptr)
{
if(cap->val == value)
return 1;
cap = cap -> urm;
}
return 0;
}
void adauga(int value)
{
if(exista(value))
return;
nod *first = buckets[value % MOD];
nod *temp;
temp = new nod;
temp -> val = value;
temp -> urm = nullptr;
if(first == nullptr)
buckets[value % MOD] = temp;
else
{ nod *aux = buckets[value % MOD];
while(aux ->urm != nullptr)
aux = aux -> urm;
aux -> urm = temp;
}
}
void sterge(int value)
{
if(!exista(value))
return;
nod *first = buckets[value % MOD];
nod *temp = first;
if(temp -> val == value)
{
buckets[value % MOD] = temp->urm;
delete temp;
return;
}
nod *aux = first;
while(aux->urm->val != value)
aux = aux -> urm; //parcurg lista pana inaintea nodului de sters
temp = aux -> urm;
aux -> urm = aux -> urm -> urm;
delete temp;
}
int main()
{ int n, op, x;
fin >> n;
// nod *last = nullptr;
for(int i = 0 ; i < n ; i++)
{
fin >> op >> x;
if(op == 1)
adauga(x);
else
if(op == 2)
sterge(x);
else
if(op == 3)
fout << exista(x)<< "\n";
}
return 0;
}