PAT 1078. 哈希
原题链接
简单
作者:
YAX_AC
,
2024-11-14 19:06:00
,
所有人可见
,
阅读 2
#include<iostream>
using namespace std;
const int N = 10010;
int s,n;
int h[N];
bool is_prime(int x)
{
if(x==1) return 0;
for(int i = 2; i*i<=x; i++)
if(x%i==0) return 0;
return 1;
}
int find(int x)
{
int t = x%s;
for(int k = 0; k<s; k++)
{
int i = (t+k*k)%s;
if(!h[i]) return i;
}
return -1;
}
int main()
{
cin>>s>>n;
while(!is_prime(s)) s++;
for(int i = 0; i<n; i++)
{
int x;
cin>>x;
int t = find(x);
if(t==-1) printf("-");
else
{
h[t] = x;
cout<<t;
}
if(i!=n-1) cout<<" ";
}
return 0;
}