传统题 1000ms 256MiB

拉链法

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

哈希表又称散列表,是指任意的键值 key 都唯一对应到哈希表中的某个位置,只需要输入查找的键值,就可以快速地找到其对应的 value,类似 Python 里的字典。

给定哈希函数:

def hashing(key):
    return key % M

其中 MM 是一个固定的常数。

但可能多个键值可能对应哈希表的同一个位置,于是就有了拉链法。

拉链法是在每个存放数据的地方开一个链表,如果有多个键值索引到同一个地方,只用把他们都放到那个位置的链表里就行了。

查询的时候需要把对应位置的链表整个扫一遍,对其中的每个数据比较其键值与查询的键值是否一致。

现在你要进行下面 33 种操作

  1. 往哈希表加入一个键值为 kk,数值为 vv 的元素 如果哈希表的该位置已有元素,则加入该位置链表的开头;
  2. 查询某个键值为 kk 的元素对应的数值 vv;
  3. 查询某个键值为 kk 的元素在链表中的位置。

输入格式

第一行两个正整数 n,Mn,M,分别表示表示操作次数和模数。

接下来 nn 行每行包括 22 或 33 个整数,表示一个操作。操作可以是一下四种之一:

  • 1 k v 表示第一种操作;
  • 2 k 表示第二种操作;
  • 3 k 表示第三种操作;

输出包括若干行整数,为所有操作 22 和操作 33 的结果。

样例 #1

样例输入 #1

8 10
1 15 1
1 27 2
1 9 3
1 19 4
2 15
1 29 5
2 19
3 9

样例输出 #1

1
4
3

数据范围

对于 100%100\% 的数据,保证 1≤n≤104,1≤M≤105,1≤k≤1091\le n \le 10^4,1 \le M \le 10^5,1\le k\le10^9 ,保证键值互不相同。

技选1作业

未认领
状态
已结束
题目
11
开始时间
2026-7-7 0:00
截止时间
2026-7-8 23:59
可延期
24 小时