Pagini recente » Cod sursa (job #1422575) | Cod sursa (job #2611866) | Cod sursa (job #1101288) | Cod sursa (job #2467695) | Cod sursa (job #2740997)
#include <fstream>
std::ifstream f("hashuri.in");
std::ofstream g("hashuri.out");
const unsigned PRIM = 513407;
struct Element
{
unsigned nr;
Element *urm;
};
Element* Tab[PRIM];
inline unsigned get_Hash(unsigned K) { return K % PRIM; }
bool cautare(unsigned K)
{
Element* trans = Tab[get_Hash(K)];
while(trans)
{
if(trans->nr == K)
return true;
trans = trans->urm;
}
return false;
}
void adaugare(unsigned K)
{
unsigned Hash = get_Hash(K);
Element* trans = Tab[Hash];
while(trans)
{
if(trans->nr == K)
return;
trans = trans->urm;
}
Element* Nou = new Element;
Nou->nr = K;
Nou->urm = Tab[Hash];
Tab[Hash] = Nou;
}
void stergere(unsigned K)
{
unsigned Hash = get_Hash(K);
if(!Tab[Hash])
return;
if(Tab[Hash]->nr == K)
{
Element* aux = Tab[Hash];
Tab[Hash] = Tab[Hash]->urm;
delete aux;
return;
}
Element* trans = Tab[Hash];
while(trans->urm)
{
if(trans->urm->nr == K)
{
Element* aux = trans->urm;
trans->urm = aux->urm;
delete aux;
return;
}
trans = trans->urm;
}
}
int main()
{
unsigned N;
f >> N;
for(unsigned Op, Nr, i = 0; i < N; ++i)
{
f >> Op >> Nr;
if(Op == 1)
adaugare(Nr);
else if(Op == 2)
stergere(Nr);
else
g << cautare(Nr) << '\n';
}
return 0;
}