#include<bits/stdc++.h>
using namespace std;
const int maxn =1e6+100;
int vis[maxn];//标记下表,判断哪个位置有被访问过
int ans[maxn];//存答案
int n,m;
int Hash(int v)
{
int k=v%m;
for(int i=k;;i++)
{
int now = i%m;//把vis下表控制在小于m的范围内
if(vis[now] == -1||vis[now]==v)
{
vis[now]=v;
return now;
}
}
}
int main()
{
while(cin>>n>>m)
{
memset(vis,-1,sizeof(vis));
for(int i=0;i<n;i++)
{
int v;
cin>>v;
ans[i] = Hash(v);
}
for(int i=0;i<n;i++)
{
if(i==n-1)
cout<<ans[i]<<endl;
else
cout<<ans[i]<<" ";
}
}
return 0;
}
线性之哈希表
最新推荐文章于 2022-03-16 15:47:49 发布