Pagini recente » Cod sursa (job #1226222) | Cod sursa (job #2902141) | Cod sursa (job #2719373) | Cod sursa (job #2937096) | Cod sursa (job #119477)
Cod sursa(job #119477)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define maxh (1<<18)
int H1[maxh][5], H2[maxh][5];
int r1, r2;
void init()
{
srand(time(0));
r1=(rand()<<1)|1;
r2=(rand()<<1)|1;
}
inline int hash1(int v)
{
return (unsigned) (v*r1)>>14;
}
inline int hash2(int v)
{
return (unsigned) (v*r2)>>14;
}
inline void insert(int v)
{
int h1=hash1(v);
int h2=hash2(v);
if(H1[h1][0]<H2[h2][0])
H1[h1][++H1[h1][0]]=v;
else H2[h2][++H2[h2][0]]=v;
}
inline int find(int v)
{
int h1=hash1(v);
int h2=hash2(v);
int i;
for(i=H1[h1][0]; i ; --i)
if(H1[h1][i]==v) return 1;
for(i=H2[h2][0]; i ; --i)
if(H2[h2][i]==v) return 1;
return 0;
}
int main()
{
init();
int n=1000000,i;
for(i=1;i<=n;++i) insert(rand());
for(i=1;i<=n;++i) find(rand());
int m=0;
for(i=0;i<maxh;++i)
{
if(m<H1[i][0]) m=H1[1][0];
if(m<H2[i][0]) m=H2[i][0];
//m>?=H1[i][0],m>?=H2[i][0];
}
printf("%d\n",m );
}