#include<iostream>
#include<vector>
using namespace std;
bool isprime(int n)
{
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int tsize,n,m,a;
scanf("%d%d%d",&tsize,&n,&m);
//计算hash表长度
while(!isprime(tsize))
tsize++;
//goujianhash表
vector<int> v(tsize);
for(int i=0;i<n;i++)
{
scanf("%d",&a);
//flag为0表示未成功插入
int flag=0;
//注意平方探测法写法
for(int j=0;j<=tsize;j++)
{
int pos=(a+j*j)%tsize;
//pos位没有元素,插入
if(v[pos]==0)
{
v[pos]=a;
flag=1;
break;
}
}
//未成功插入
if(!flag)
printf("%d cannot be inserted.\n",a);
}
int ans=0;
for(int i=0;i<m;i++)
{
scanf("%d",&a);
//计算查询长度
for(int j=0;j<=tsize;j++)//注意<=,不能写<
{
ans++;
int pos=(a+j*j)%tsize;
//找到或者不存在,跳出
if(v[pos]==a||v[pos]==0)
break;
}
}
printf("%.1f\n",ans*1.0/m);
return 0;
}
PAT 1145 Hashing - Average Search Time (25 分)
最新推荐文章于 2021-12-06 18:47:49 发布