题意:模拟一下hash表,用平方探测法来处理冲突,最后输出查询的平均时间
思路:模拟hash
注意点:时间的运算应该要更加熟练掌握,什么时候是跳出循环的关键
#include<bits/stdc++.h>
using namespace std;
int ha[100005];
int isprime(int n){
if(n==0||n==1)
return 0;
if(n==2||n==3)
return 1;
if(n%2==0)
return 0;
for(int i=3;i<sqrt(n)+1;i+=2){
if(n%i==0)
return 0;
}
return 1;
}
int main(){
int n,m,k;
cin>>n>>m>>k;
memset(ha,-1,sizeof(ha));
while(!isprime(n))n++;
int tmp;
while(m--){
cin>>tmp;
int f=0;
for(int i=0;i<=n;i++){
int ind=(tmp+i*i)%n;
if(ha[ind]==-1){
ha[ind]=tmp;
f=1;
break;
}
}
if(f==0)
cout<<tmp<<" cannot be inserted.\n";
}
int sum=0;
for(int j=0;j<k;j++){
cin>>tmp;
for(int i=0;i<=n;i++){
int ind=(tmp+i*i)%n;
sum++;
if((ha[ind]==tmp)||(ha[ind]==-1)){
break;
}
}
}
printf("%.1lf\n",sum*1.0/k);
return 0;
}