作者 DS课程组
单位 浙江大学
给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key)=Key将关键字映射到长度为P的散列表中。用线性探测法解决冲突。
输入格式:
输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
输出格式:
在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
输入样例:
4 5
24 15 61 88
输出样例:
4 0 1 3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
#include <vector>
using namespace std;
int main (){
int n,p;
scanf("%d%d",&n,&p);
vector<int> a(p,-1);//初始化数组,全为-1
while(n--){
int x;
cin>>x;
if(a[x%p]==-1)a[x%p]=x,cout<<x%p;//这个位置没有数就直接放进去
else{
int i = x%p;
while(a[i]!=-1&&a[i]!=x){
i=(i+1)%p;
}//有冲突的话就往后找
a[i]=x;
cout<<i;
}
if(n>0)cout<<' ';
}
return 0;
}