Nu aveti permisiuni pentru a descarca fisierul grader_eval.cpp
Cod sursa(job #910991)
| Utilizator | Data | 11 martie 2013 11:18:19 | |
|---|---|---|---|
| Problema | Hashuri | Scor | 30 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.83 kb |
#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=428177;
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--;
}
}
