1145 Hashing - Average Search Time (25 分)
如果查找了 TSize 次,每次查找的位置上均有数,但都不等于要查找的数,则认为查找时间是 TSize+1。
const int N=1e4+10;
int Tsize,n,m;
int h[N];
int cnt;
bool isprime(int x)
{
if(x < 2) return false;
for(int i=2;i*i<=x;i++)
if(x % i == 0)
return false;
return true;
}
int find(int x)
{
int k=x%Tsize;
for(int i=0;i<Tsize;i++)
{
int t=(k+i*i)%Tsize;
cnt++;
if(!h[t] || h[t] == x) return t;
}
return -1;
}
int main()
{
cin>>Tsize>>n>>m;
while(!isprime(Tsize)) Tsize++;
for(int i=0;i<n;i++)
{
int x;
cin>>x;
int k=find(x);
if(k == -1) cout<<x<<" cannot be inserted."<<endl;
else h[k]=x;
}
double sum=0;
for(int i=0;i<m;i++)
{
int x;
cin>>x;
cnt=0;
int k=find(x);
if(k == -1) sum+=Tsize+1;
else sum+=cnt;
}
printf("%.1f\n",sum/m);
//system("pause");
return 0;
}