https://pintia.cn/problem-sets/994805342720868352/problems/994805343236767744
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
const int null=0x3f3f3f3f;
int hush[N],n,m,s;
int insert(int x)
{
for(int i=0;i<s;i++)
{
int pos=(x+i*i)%s;
if(hush[pos]==null)//找到位置了
{
hush[pos]=x;
return pos;
}
}
return -1;
}
int find(int x)
{
int cnt=0;
for(int i=0;i<s;i++)
{
int pos=(x+i*i)%s;
cnt++;
if(hush[pos]==x||hush[pos]==null)//找到位置了,或者根本没插入
{
return cnt;
}
}
return s+1;
}
bool check(int x)
{
if(x==1) return true;
for(int i=2;i<=x/i;i++) if(x%i==0) return true;
return false;
}
int main(void)
{
memset(hush,0x3f,sizeof hush);
cin>>s>>n>>m;
while(check(s)) s++;//求最小的质数
for(int i=1;i<=n;i++)
{
int x; cin>>x;
int ans=insert(x);
if(ans==-1) printf("%d cannot be inserted.\n",x);
}
int sum=0;
for(int i=0;i<m;i++)
{
int x; cin>>x;
sum+=find(x);
}
printf("%.1lf",sum*1.0/m);
return 0;
}