奇怪的题目
没找到次数要+1??????
搜了很多资料没有对此的解释
本体正确性存疑
#include <bits/stdc++.h>
using namespace std;
#define FORP(i,a,b) for(int i=a;i<=b;i++)
#define db(a) (cout<<"---"<<a<<endl)
#define mp(a,b) make_pair(a,b)
typedef pair<int,int> Pair;
int a[1001000];
int hashtable[1020000];
int ms,n,m;
bool insert(int x){
for(int i=0;i<ms;i++){
if(!hashtable[(x+i*i)%ms]){
hashtable[(x+i*i)%ms]=x;
return true;
}
}
return false;
}
void dg(){
for(int i=0;i<ms;i++){
printf("%d ",hashtable[i]);
}
printf("\n");
}
bool prime(int x){
if(x==1) return false;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
int main(){
cin>>ms>>n>>m;
while(!prime(ms)){
ms++;
}
FORP(i,1,n){
cin>>a[i];
if(!insert(a[i])){
printf("%d cannot be inserted.\n",a[i]);
}
}
int tot=0;
FORP(i,1,m){
int data;
cin>>data;
int sum=1;
FORP(q,0,ms-1){
if(hashtable[(data+q*q)%ms]==data||!hashtable[(data+q*q)%ms]){
break;
}
sum++;
}
tot+=sum;
}
printf("%.1lf\n",tot*1.0/m );
return 0;
}