A37631.线性探查法

普及/提高-

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个大小为 NN 的哈希表,并定义以下哈希函数:

H(X)=XmodNH(X) = X \mathbin{\mathrm{mod}} N

这里,XmodNX \mathbin{\mathrm{mod}} N 表示 XX 除以 NN 后的余数。

接下来给出 QQ 个查询,对于每个查询 ii,若 XiX_i 已在哈希表中,请你输出其在哈希表中的位置;否则将其插入哈希表,再输出其插入的位置。

我们使用线性探查法解决哈希冲突,即对于要插入的元素 XX,若 H(X)H(X) 已经存在其他元素,则依次检查 H(X+1),H(X+2),H(X+3),H(X + 1), H(X + 2), H(X + 3), \cdots 直至找到内容为空的单元。

数据范围\large{数据范围}

  • 1QN1051 \le Q \le N \le 10^5
  • 1Xi10121 \le X_i \le 10^{12}

输入格式

对于每个测试文件,格式如下:

N Q\tt{N\ Q}
X1\tt{X_1}
X2\tt{X_2}
\tt{\vdots}
XQ\tt{X_Q}

输出格式

对于每个查询 ii,若 XiX_i 已在哈希表中,输出其位置,否则将其插入到哈希表,并输出插入的位置。

输入输出样例

  • 输入#1

    5 5
    13
    28
    52
    2
    100

    输出#1

    3
    4
    2
    0
    1

说明/提示

样例 1\bf{样例\ 1:}

X1=13X_1 = 13H(13)=13mod5=3H(13) = 13 \mathbin{\mathrm{mod}} 5 = 3,所以将 1313 插入表中位置 33 处;此时表中元素:

0 1 2 3 4
13

X2=28X_2 = 28H(28)=28mod5=3H(28) = 28 \mathbin{\mathrm{mod}} 5 = 3,但是 33 处已有元素 1313,所以继续尝试 H(29)=29mod5=4H(29) = 29 \mathbin{\mathrm{mod}} 5 = 4,将 2828 插入表中位置 44 处;此时表中元素:

0 1 2 3 4
13 28

X3=52X_3 = 52H(52)=52mod5=2H(52) = 52 \mathbin{\mathrm{mod}} 5 = 2,将 5252 插入表中位置 22 处;此时表中元素:

0 1 2 3 4
52 13 28

X4=2X_4 = 2H(2)=2mod5=2H(2) = 2 \mathbin{\mathrm{mod}} 5 = 2,但是 22 处已有元素 5252,继续尝试 H(2+1)=3,H(2+2)=4,H(2+3)=0H(2 + 1) = 3, H(2 + 2) = 4, H(2 + 3) = 0,将 22 插入表中位置 00 处;此时表中元素:

0 1 2 3 4
2 52 13 28

X5=100X_5 = 100H(100)=100mod5=0H(100) = 100 \mathbin{\mathrm{mod}} 5 = 0,但是 00 处已有元素 5252,继续尝试 H(100+1)=1H(100 + 1) = 1,将 100100 插入表中位置 11 处;此时表中元素:

0 1 2 3 4
2 100 52 13 28
首页