翻译
查看原帖
翻译
1008068
_Eriri_楼主2024/1/6 13:54

给出一个由 hh 个单元组成的哈希表,单元格编号从 00 到 h − 1h - 1 。每个元素都有一个相应的哈希值hash(0<=hash<h)(0<=hash<h)

当一个元素被添加到表中时,如果该元素的哈希值对应的单元格没有被占用,那么该元素就会被添加到该单元格中。否则会发生冲突。当一个元素从表中删除时,它所占用的单元格将变为空格。

假设添加元素的哈希值等于 tt ,而表中的单元格 tt 已被占用。然后,将该元素添加到 (t + m)mod  h(t + m) \mod h 单元。如果单元格 (t + m)mod  h(t + m) \mod h 也已被占用,则将该元素添加到单元格 (t + 2⋅m)mod  h(t + 2·m) \mod h ,然后是单元格(t + 3⋅m)mod  h (t + 3·m) \mod h 。题目保证能找到一个空余的单元格

添加元素时对已被占用的单元格的调用称为虚调用。换言之,如果将元素添加到单元格 (t + i⋅m)mod  h(i ≥ 0)(t + i·m) \mod h (i ≥ 0) 中,那么正好进行了 i 次虚调用。

要求计算对 hash 表进行的虚调用总数。假定删除不作虚调用。在执行操作前,表是空的。

输入

第一行输入包含三个整数 hh 、 mm 和 nn ( 1 ≤ m < h ),以空格分隔,其中 hh 是哈希表的大小, mm 是用解决冲突用的数字, nn 是操作次数。 接下来的 nn 行操作,每个操作都用一行来描述。操作说明如下

"+ id hash"向表中添加元素的值和 hash 值 (0≤id≤109,0≤hash<h)(0\le id \le 10^9, 0\le hash<h)

"- id"删除值为id的元素

保证 id 的值是唯一的,并且不会删除任何不存在的对象。

1 ≤ h ≤ 2⋅105,1 ≤ h ≤ 2·10^5, 1 ≤ n ≤ 2⋅1051 ≤ n ≤ 2·10^5

输出

哈希表的虚拟调用总数。

2024/1/6 13:54
加载中...