#P1879. 2024.8.11-PDD-T4-哈希表

2024.8.11-PDD-T4-哈希表

题目描述

在一个简单的哈希表实现中,对于给定的哈希函数 f(x)=x%nf(x) = x \% n,有一长度为 nn 的数组用于存储 x0x \geq 0 的值。

当需要向哈希表插入一个值 xx 时,从数组的下标 f(x)f(x) 开始,向右循环移动,找到第一个未存储该数的位置,写入 xx。若哈希表已满或 xx 已存在于表中,则不再插入 xx

给定 nn 个整数 aia_i (ai1a_i \geq -1) 表示哈希表数组中存储的元素,1-1 表示当前位置未写入数据。

请按插入哈希表的顺序输出原序列(假设插入过程中不存在相同的数字),如果有多个满足条件的序列,输出字典序最小的。

输入描述

  • 第一行为一个正整数 nn
  • 第二行为 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,含义如题。输入保证序列为通过线性探测法插入的哈希表结果。(除 ai=1a_i = -1 外,其它数字两两互不相等。)

输出描述

  • 输出 ll 个非负整数,表示插入哈希表后的原序列,其中 ll 为哈希表中非 1-1 的整数个数。

补充说明

  • 对于 30% 的数据,1n101 \leq n \leq 10
  • 对于 60% 的数据,1n10001 \leq n \leq 1000
  • 对于 100% 的数据,1n1051 \leq n \leq 10^51ai109-1 \leq a_i \leq 10^9

样例输入输出

5
-1 1 -1 3 4
1 3 4
5
9 1 8 3 4
1 3 4 9 8

说明

【样例 #1】

由于没有冲突,原序列可以是 [1,3,4][1,3,4] 的任意一种排列组合,而其中 [1,3,4][1,3,4] 是所有可能的结果中字典序最小的一种。

【样例 #2】

数据插入过程如下:[1,1,1,1,1][-1, -1, -1, -1, -1]\to[1,1,1,1,1][-1, 1, -1, -1, -1]\to[1,1,1,3,1][-1, 1, -1, 3, -1]\to[1,1,1,3,4][-1, 1, -1, 3, 4]\to[9,1,1,3,4][9, 1, -1, 3, 4]\to[9,1,8,3,4][9, 1, 8, 3, 4]

若按 [1,3,4,8,9][1, 3, 4, 8, 9] 顺序插入,将得到结果 [8,1,9,3,4][8, 1, 9, 3, 4],与输入不符,因此不存在字典序更小的插入顺序。