Quadratic probing (二次探测法)
题意:
思路
平方探测法原理
AC代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool isPrime(int n){
if(n==0||n==1) return false;
for(int i=2;i*i<n;i++){ //这边易错,容易从0开始,就会出现浮点错误
if(n%i==0) return false;
}
return true;
}
int main(){
int s,n,m,x,sum=0;
scanf("%d%d%d",&s,&n,&m);
while(!isPrime(s)) s++;
vector<int> v(s);
for(int i=0;i<n;i++){
scanf("%d",&x);
int flag=0;
for(int j=0;j<s;j++){
int pos=(x+j*j)%s;
if(v[pos]==0){
v[pos]=x;
flag=1;
break;
}
}
if(!flag) printf("%d cannot be inserted.\n",x);
}
for(int i=0;i<m;i++){
scanf("%d",&x);
for(int j=0;j<=s;j++){
sum++;
int pos=(x+j*j)%s;
if(v[pos]==x||v[pos]==0) break;
}
}
printf("%.1lf",sum*1.0/m);
return 0;
}