http://pta.patest.cn/pta/test/18/exam/4/question/641
#include<vector>
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<map>
using namespace std;
#define MAXSIZE 50001
#define MAXTABLESIZE 50000
int Size=0;
int NextPrime(int N)
{
if(N==1||N==0)
return 2;
if(N==2||N==3)
return N; //²âÊÔ¶þ
int i,p=(N%2)?N:N+1;
while(p<=MAXTABLESIZE)
{
for(i=(int)sqrt(p);i>2;i--)
if(!(p%i)) break;
if(i==2) break;
else p+=2;
}
return p;
}
int Hash(int key,int p)
{
return key%p;
}
void Insert(int h[],int key,int n)
{
int m,p=Hash(key,n);
m=p;
int s=n;
int t=0;
if(h[p])
{
t=0 ;
for(t=1;t<n;t++)
{
p=(m+t*t)%n;
if(h[p]==0)
break;
}
}
if(t<s)
{
if(Size==0)
printf("%d",p);
else
printf(" %d",p);
h[p]=key;
Size++;
}
else
{
if(Size==0)
printf("-");
else
printf(" -");
}
}
int main()
{
int n,i,t,m;
int key;
int h[MAXSIZE];
int a[MAXSIZE];
int p[MAXSIZE];
scanf("%d%d",&n,&m);
n=NextPrime(n);
for(i=0;i<n;i++)
h[i]=0;
for(i=0;i<m;i++)
scanf("%d",&a[i]);
for(i=0;i<m;i++)
Insert(h,a[i],n);
printf("\n");
return 0;
}