#6879. C. Bureaucracy(官僚流程)
C. Bureaucracy(官僚流程)
NZIC 2026 Round 1(新西兰信息学竞赛 2026 第二轮)
Bureaucracy(官僚流程)
输入: 标准输入(stdin) 输出: 标准输出(stdout) 内存限制: 256 MB 时间限制: 2.0 秒
- problem statement
- submit
- submissions
题目描述
你受雇在一家为鸭子提供咨询服务、而且人手严重不足的咨询公司担任前台接待员。
你需要处理:
个关于鸭子来来往往的事件。
每只鸭子都有一个名字:
当它们到达时,会被分配一个票号。
这些票号并不是按顺序分配的,因为你的桌上只是放着一大堆没有排序的票,你会随机拿一张票分配给某只鸭子。
当某个咨询窗口空闲时,你会被要求叫号:
也就是叫出持有这个票号的鸭子。
有时候,鸭子会忘记自己的票号,因此会来询问你,让你提醒它。
另外,有些鸭子可能需要拜访多个咨询人员,因此同一只鸭子可能会被叫号多次。
你需要实现一个程序,处理这 (N) 个事件,包括:
- 鸭子到达并领取票号;
- 根据票号叫出鸭子的名字;
- 根据鸭子的名字查询它的票号。
输入格式
第一行包含一个整数:
N
表示事件的数量。
接下来的 (N) 行,每行有以下三种格式之一。
类型 1:分配票号
A s_i t_i
表示:
将票号 (t_i) 分配给名字为 (s_i) 的鸭子。
类型 2:根据票号查询鸭子名字
N t_i
表示:
需要找出被分配了票号 (t_i) 的鸭子的名字。
类型 3:根据鸭子名字查询票号
T s_i
表示:
需要找出名字为 (s_i) 的鸭子被分配的票号。
输出格式
对于每一个类型为:
N
或者:
T
的事件,都输出一行结果。
对于每一次叫号事件:
输出需要被叫到的鸭子的名字。
对于每一次鸭子忘记票号的事件:
输出这只鸭子的票号。
数据范围
鸭子的名字最多包含:
个小写英文字母。
保证:
- 同一个票号不会被分配给多只鸭子;
- 同一只鸭子不会被分配多个票号;
- 每一个类型为
N的事件,对应的票号一定已经被分配; - 每一个类型为
T的事件,对应的鸭子名字一定已经被分配过票号。
子任务
- 子任务 1(30%):
- 子任务 2(27%):
鸭子永远不会忘记自己的票号。
也就是说,不会出现类型为:
T
的事件。
- 子任务 3(43%):
没有额外限制。
样例说明
样例 1
一共有 5 个事件:
albert被分配票号 6;alfred被分配票号 1;- 票号为 6 的鸭子被叫号,对应的鸭子是
albert; andrew被分配票号 3;andrew忘记了自己的票号,所以来询问。他的票号是 3。
样例输入 1
5
A albert 6
A alfred 1
N 6
A andrew 3
T andrew
样例输出 1
albert
3
样例输入 2
4
A greg 408
A grug 12
A grog 17
N 12
样例输出 2
grug
| 测试点编号 | 层级 | N |
数据特征 | 主要覆盖点 |
|---|---|---|---|---|
| 1 | 弱数据 | 0 | 无操作 | 最小规模,输出文件为空 |
| 2 | 2 | 添加后按姓名查询 | A、T 基本功能 |
|
| 3 | 添加后按票号查询 | A、N 基本功能 |
||
| 4 | 正常数据 | 9 | 多人、多票号、交叉查询 | 两个映射的常规使用 |
| 5 | 4 | 查询不存在的姓名和票号 | 不存在姓名输出 0;不存在票号输出空行 |
|
| 6 | 5 | 同一姓名先后绑定不同票号 | 姓名映射被覆盖,旧票号映射仍保留 | |
| 7 | 不同姓名绑定同一票号 | 票号映射被覆盖,旧姓名映射仍保留 | ||
| 8 | 较强数据 | 9 | 姓名和票号交叉覆盖 | 检查双向映射不完全同步的情况 |
| 9 | 边界数据 | 11 | 0、负数、INT_MIN、INT_MAX |
int 边界票号及负票号 |
| 10 | 综合数据 | 40 | 缺失查询、大小写、长姓名、重复覆盖 | 多种操作组合及历史映射残留 |