好吧这道题我是查的,哈希散列中的二次方探查法没学过,也有可能是学过忘了。。这要是遇到这种题目25分直接白给。。。我再去好好研究研究。。
Quadratic probing (with positive increments only) is used to solve the collisions.翻译:使用二次方探查法解决这个问题
#include<bits/stdc++.h>
using namespace std;
int hash1[10000];
int size,n;
bool is_prime(int s){
if(s<=3) return s>1;
int sqr = sqrt(s);
for(int i =2;i<=sqr;i++)
if(s%i==0) return false;
return true;
}
void insert(int key){
for(int step =0;step<size;step++){
int index = (key +step *step) % size;
if(hash1[index]==0){
hash1[index]=1;
cout<<index%size;
return;
}
}
cout<<"-";
}
int main(){
cin>>size>>n;
while(!is_prime(size)) size++;
for(int i =0;i<n;i++){
int key;
cin>>key;
if(i!=0) cout<<" ";
insert(key);
}
cout<<endl;
}