Pagini recente » Cod sursa (job #1081623) | Cod sursa (job #2822111) | Cod sursa (job #889988) | Cod sursa (job #2422507) | Cod sursa (job #119478)
Cod sursa(job #119478)
using namespace std;
#include <cstdio>
#include <vector>
#include <cstdlib>
#define maxh (1<<18)
#define pb push_back
vector<int> H1[maxh], H2[maxh];
int r1, r2;
inline 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].size()<H2[h2].size())
H1[h1].pb(v);
else H2[h2].pb(v);
}
inline int find(int v)
{
vector<int>::iterator it;
int h=hash1(v);
for(it=H1[h].begin();it!=H1[h].end();++it)
if(*it==v)return 1;
h=hash2(v);
for(it=H2[h].begin();it!=H2[h].end();++it)
if(*it==v) return 1;
return 0;
}
int main()
{
init();
int n=1000000, i, m=0;
for(i=1;i<=n;++i) insert(rand());
for(i=1;i<=n;++i) find(rand());
for(i=0;i<maxh;++i)
{
if(m<H1[i].size())m=H1[i].size();
if(m<H2[i].size())m=H2[i].size();
}
printf("%d\n", m);
return 0;
}