1078. Hashing (25)
注意:题目要求用二次探测法(Quadratic probing)解决冲突
#include <stdio.h>
#include <malloc.h>
#include <math.h>
int hash[10010];
int isprime(int n)
{
if(n==1)
return 0;
if(n==2)
return 1;
int i,key=sqrt(n);
for(i=2;i<=key;++i)
if(n%i==0)break;
if(i==key+1)
return 1;
else
return 0;
}
int main()
{
int msize,n;
scanf("%d %d",&msize,&n);
while(!isprime(msize))
++msize;
while(n--)
{
int e,i;
scanf("%d",&e);
for(i=0;i<msize;++i)
{
if(!hash[(e+i*i)%msize])
{
hash[(e+i*i)%msize]=e;
printf("%d",(e+i*i)%msize);
break;
}
}
if(i==msize)printf("-");
if(n)printf(" ");
}
return 0;
}