acwing1638哈希平均时间,调不出来了


#include<bits/stdc++.h>
using namespace std;
const int N=1e4+100;
int h[N],n,m,MSize;
bool prime(int x)
{
    if(x<2)  return false;
    for(int i=2;i*i<=x;i++)
    {
        if(x%i==0)  return false;
    }
    return true;
}
int main()
{
    int MSize,n,m;
    int ans;
    scanf("%d%d%d",&MSize,&n,&m);
    while(!prime(MSize))  MSize++;
    while(n--){
        int x;
        scanf("%d",&x);
        int y=x%MSize;
        for(int i=0;;i++)
        {
            int z=(y+i*i)%MSize;
            if(i&&z==y)  
            {
                cout<<x<<" cannot be inserted."<<endl;
                break;
            }
            if(!h[z])
            {
                h[z]=x;
                break;
            }
        }
    }
     for(int j=0;j<m;j++)
    {
        int x,i;
        cin>>x;
        for(i=0;i<MSize;i++)
        {
            // 若当前位置存储 x 则找到,若当前位置为空则说明 x 没有被存入 
            if(h[(x%m+i*i)%m]==x||!h[(x%m+i*i)%m]) break;
        }
        ans+=i+1;
    }
    printf("%.1f",ans*1.0/m);
    return 0;
}