Pagini recente » Cod sursa (job #3196486) | Cod sursa (job #2574910) | Cod sursa (job #2827813) | Cod sursa (job #1113300) | Cod sursa (job #904615)
Cod sursa(job #904615)
#include <fstream>
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(val,k)]==val)
hash1[func1(val,k)]=0;
else
if (hash2[func2(val,k)]==val)
hash2[func2(val,k)]=0;
}
void insereaza(int val, int k, int *hash1, int *hash2 )
{
int x,y,q=0,l=1,init;
init=val;
x=func1(val,k);
y=func2(val,k);
while (q==0)
{
if (hash1[x]==0)
{
hash1[x]=val;
q=1;
}
else
if (hash2[y]==0)
{
hash2[y]=val;
q=1;
}
else
{
if (l == 1)
{
int aux = val;
val = hash1[x];
hash1[x] = aux;
}
else
{
int aux = val;
val = hash2[y];
hash2[y] = aux;
}
l = - l;
}
if (init == val && l == 1) break;
}
}
int main()
{
int k=979457;
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--;
}
}