Cod sursa(job #119482)

Utilizator gigi_becaliGigi Becali gigi_becali Data 1 ianuarie 2008 12:44:42
Problema Cutii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cstdlib>
#include <ctime>
#define maxh (1<<18)
int H1[maxh][8], H2[maxh][8];
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 );	
}