用数组存关键字,mark记位置主要的坑点是输入相同关键字的时候要放在同一位里,要多加一个判断。
代码:
#include <iostream>
using namespace std;
int main()
{
int n,p;
cin >> n >> p;
int* hash = new int[p];
for (int i = 0; i < p; i++) {
hash[i] = -1;//初始化数组,不然会出问题
}
for (int i = 0; i < n; i++) {
int temp;
cin >> temp;
int mark = temp % p;
while (hash[mark] != -1&&hash[mark]!=temp) {//该位不为空并且不等于输入的数字
mark = (mark + 1) % p;//直接加1就行,因为mark会变化,上一轮已经加1了
}
hash[mark] = temp;
if (i != n - 1)
cout << mark << " ";
else
cout << mark;//格式要求
}
delete[]hash;
}