Pagini recente » Cod sursa (job #2058593) | Cod sursa (job #1944518) | Cod sursa (job #2282181) | Cod sursa (job #1200945) | Cod sursa (job #904667)
Cod sursa(job #904667)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
int func1 (int k, int val)
{
return val%k;
}
int func2 (int k, int val)
{
return (val/k)%k;
}
int cauta(int val, int k, int *hash1, int *hash2)
{
if (hash1[func1(k,val)]==val || hash2[func2(k,val)]==val)
return 1;
else
return 0;
}
void sterge(int val,int k, int *hash1, int *hash2)
{
if (hash1[func1(k,val)]==val)
hash1[func1(k,val)]=0;
else
if (hash2[func2(k,val)]==val)
hash2[func2(k,val)]=0;
}
void insereaza(int val, int k, int *hash1, int *hash2 )
{
if (cauta(val,k,hash1,hash2)==1)
return;
else
{
int x = func1(k,val);
int y = func2(k,val);
int i=0,aux;
while (i<3)
{
if (hash1[x] == 0)
{
hash1[x] = val;
i=10;
return;
}
aux=hash1[x];
hash1[x]=val;
val=aux;
if (hash2[y] == 0)
{
hash2[y] = val;
i=10;
return;
}
aux=hash2[y];
hash2[y]=val;
val=aux;
i--;
}
}
}
int main()
{
int k=666013;
int *hash1 = (int*)calloc(k,sizeof(int));
int *hash2 = (int*)calloc(k,sizeof(int));
int n,op,val;
f>>n;
while (n>0)
{
f>>op>>val;
if (op==1)
insereaza(val,k, hash1, hash2);
if (op==2)
sterge(val, k, hash1, hash2);
if (op==3)
if (cauta(val,k,hash1,hash2)==0)
g << 0 << "\n";
else
g << 1 << "\n";
n--;
}
}