#6879. C. Bureaucracy(官僚流程)

C. Bureaucracy(官僚流程)

NZIC 2026 Round 1(新西兰信息学竞赛 2026 第二轮)

Bureaucracy(官僚流程)

输入: 标准输入(stdin) 输出: 标准输出(stdout) 内存限制: 256 MB 时间限制: 2.0 秒

  • problem statement
  • submit
  • submissions

题目描述

你受雇在一家为鸭子提供咨询服务、而且人手严重不足的咨询公司担任前台接待员。

你需要处理:

NN

个关于鸭子来来往往的事件。

每只鸭子都有一个名字:

sis_i

当它们到达时,会被分配一个票号。

这些票号并不是按顺序分配的,因为你的桌上只是放着一大堆没有排序的票,你会随机拿一张票分配给某只鸭子。

当某个咨询窗口空闲时,你会被要求叫号:

tit_i

也就是叫出持有这个票号的鸭子。

有时候,鸭子会忘记自己的票号,因此会来询问你,让你提醒它。

另外,有些鸭子可能需要拜访多个咨询人员,因此同一只鸭子可能会被叫号多次。

你需要实现一个程序,处理这 (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

的事件,都输出一行结果。

对于每一次叫号事件:

输出需要被叫到的鸭子的名字。

对于每一次鸭子忘记票号的事件:

输出这只鸭子的票号。


数据范围

1N2000001\le N\le200000 1ti1061\le t_i\le10^6

鸭子的名字最多包含:

1616

个小写英文字母。

保证:

  • 同一个票号不会被分配给多只鸭子;
  • 同一只鸭子不会被分配多个票号;
  • 每一个类型为 N 的事件,对应的票号一定已经被分配;
  • 每一个类型为 T 的事件,对应的鸭子名字一定已经被分配过票号。

子任务

  • 子任务 1(30%):
N2000N\le2000
  • 子任务 2(27%):

鸭子永远不会忘记自己的票号。

也就是说,不会出现类型为:

T

的事件。

  • 子任务 3(43%):

没有额外限制。


样例说明

样例 1

一共有 5 个事件:

  1. albert 被分配票号 6;
  2. alfred 被分配票号 1;
  3. 票号为 6 的鸭子被叫号,对应的鸭子是 albert
  4. andrew 被分配票号 3;
  5. 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 添加后按姓名查询 AT 基本功能
3 添加后按票号查询 AN 基本功能
4 正常数据 9 多人、多票号、交叉查询 两个映射的常规使用
5 4 查询不存在的姓名和票号 不存在姓名输出 0;不存在票号输出空行
6 5 同一姓名先后绑定不同票号 姓名映射被覆盖,旧票号映射仍保留
7 不同姓名绑定同一票号 票号映射被覆盖,旧姓名映射仍保留
8 较强数据 9 姓名和票号交叉覆盖 检查双向映射不完全同步的情况
9 边界数据 11 0、负数、INT_MININT_MAX int 边界票号及负票号
10 综合数据 40 缺失查询、大小写、长姓名、重复覆盖 多种操作组合及历史映射残留