和上道题类似,就是探测的值不同,即每次都为1 2 3 4。。。而平方是+-j*j的探测。
#include<bits/stdc++.h>
using namespace std;
int a[100000],ha[100000];
int main()
{
int n,m,i,j,k;
while(~scanf("%d%d",&n,&m))
{
memset(ha,0,sizeof(ha));
for(i=0;i<n;i++)
{
j=0;
scanf("%d",&a[i]);
int t=a[i]%m;
if(!ha[t])
{
ha[t]=a[i];
printf("%d",t);
}
else
{
int tmp;
bool vis;
while(ha[ (t+j)%m ])
{
vis=false;
if(ha[(t+j)%m ]==a[i])
{
tmp=(t+j)%m;
vis=true;
break;
}
j++;
}
ha[(t+j)%m ]=a[i];
if(vis)
{
printf("%d",tmp);
}
else
printf("%d",(t+j)%m);
}
if(i==n-1)
printf("\n");
else
printf(" ");
}
}
return 0;
}