Pagini recente » Cod sursa (job #1905533) | Cod sursa (job #390162) | Cod sursa (job #1396561) | Cod sursa (job #3180651) | Cod sursa (job #913066)
Cod sursa(job #913066)
#include<fstream>
#include<time.h>
#include<iostream>
#include <stdlib.h>
#define size 500000
#define prim 18593
using namespace std;
int a1,a2,*v1,*v2;
void aloca(){
v1=(int*)calloc(size,sizeof(int));
v2=(int*)calloc(size,sizeof(int));
}
void null(){
int i;
for(i=0;i<size;i++)
v1[i]=v2[i]=0;
}
int h1(int x){
long long c;
c=((x+a1)%prim+(x+a2)%prim+(x+2*a1)%prim+(x+2*a2))%size;
return c;
}
int h2(int x){
long long c;
c=((x+3*a1)%prim+(x+2*a2)%prim+(x*3)%prim+(x*(a2%10))%prim)%size;
return c;
}
void reset(){
a1=rand()%prim;
a2=rand()%prim;
}
int cautare(int x){
if(v1[h1(x)]==x)return 1;
if(v2[h2(x)]==x)return 1;
return 0;
}
int inserare(int x){
if(cautare(x)==1)return 1;
int k=0,aux;
while(k<30){
if(v1[h1(x)]==0){
v1[h1(x)]=x;
return 1;}
else if(v2[h2(x)]==0){
v2[h2(x)]=x;
return 1;}
else{
k++;
if(k%2==1){
aux=v1[h1(x)];
v1[h1(x)]=x;
x=aux;}
else{
aux=v2[h2(x)];
v2[h2(x)]=x;
x=aux;}
}
}
return 0;
}
void sterge(int x){
if(v1[h1(x)]==x)v1[h1(x)]=0;
else if(v2[h2(x)]==x)v2[h2(x)]=0;
}
void rehash(int k){
reset();
null();
int i,op,x;
ifstream f("hahsuri.in");
f>>i;
for(i=1;i<=k;i++){
f>>op>>x;
if(op==1)
if(inserare(x)==0)rehash(k);
if(op==2){
if(cautare(x)==1)
sterge(x);
}
}
f.close();
}
main(){
srand(time(NULL));
int n,i,op,x;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
f>>n;
aloca();
reset();
for(i=1;i<=n;i++){
f>>op>>x;
if(op==1)
{if(inserare(x)==0)rehash(i);}
if(op==2){
if(cautare(x)==1)
sterge(x);
}
if(op==3){
if(cautare(x)==1)
g<<1<<"\n";
else g<<0<<"\n";
}
}
}