题目描述
Given a hash table of size N, we can define a hash function H(x)=x%N. Suppose that the linear probing is used to solve collisions, we can easily obtain the status of the hash table with a given sequence of input numbers.
However, now you are asked to solve the reversed problem: reconstruct the input sequence from the given status of the hash table. Whenever there are multiple choices, the smallest number is always taken.
Input Specification:
Each input file contains one test case. For each test case, the first line contains a positive integer N (≤1000), which is the size of the hash table. The next line contains N integers, separated by a space. A negative integer represents an empty cell in the hash table. It is guaranteed that all the non-negative integers are distinct in the table.
Output Specification:
For each test case, print a line that contains the input sequence, with the numbers separated by a space. Notice that there must be no extra space at the end of each line.
Sample Input:
11
33 1 13 12 34 38 27 22 32 -1 21
Sample Output:
1 13 12 21 33 34 38 27 22 32
思路
看了陈越老师的思路是用拓扑排序做,奈何刚开始学,还没复习过什么都不熟悉,想着用自己的方法做一做,提交ac了而且貌似效率还不错的样子,所以试着写下自己的第一篇Blog。
思路是degree保存其当前地址减去哈希地址为排在其前面输入哈希表的数的数目,并复制存入cmpdegree以便比较,当其前驱值确定并输出(先放入a[n]数组)后,其degree减1。当degree为-1时表示此值已经确定了在输入序列的位置不用再进行比较。当最后degree都为-1即表示所有哈希表中的值都已确定的输入次序,此时顺序输出a[k]即可,其中为-1的值代表原本哈希表中的空位。
代码
#include <stdio.h>
int main() {
int n;
scanf

根据给定的哈希表状态,使用线性探测解决冲突的方法,重建输入序列。当存在多种可能性时,选择最小的数字。题目提供了一种解决方案,通过维护degree来跟踪每个数在输入序列的位置,并通过拓扑排序确定顺序。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



