给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。
输入格式:
输入第一行首先给出两个正整数N(≤)和P(≥的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
输出格式:
在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
输入样例:
4 5
24 15 61 88
输出样例:
4 0 1 3
代码:
#include <cstdio> #include <map> using namespace std; int n,p,vis[2001],ans[1001],d; map<int,int> mp; int main() { scanf("%d%d",&n,&p); for(int i = 0;i < n;i ++) { scanf("%d",&d); if(mp.count(d)) { ans[i] = mp[d]; continue; } int dd = d % p; while(vis[dd]) dd = (dd + 1) % p; vis[dd] = 1; ans[i] = dd; mp[d] = ans[i]; } for(int i = 0;i < n;i ++) { if(i) putchar(' '); printf("%d",ans[i]); } }