Cod sursa(job #119478)

Utilizator gigi_becaliGigi Becali gigi_becali Data 1 ianuarie 2008 12:41:37
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
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;
}