#P2259. Team Queue

Team Queue

描述

队列(Queues)和优先队列(Priority Queues)是大多数计算机科学家所熟知的数据结构。然而,团队队列(Team Queue) 虽然常出现在日常生活中,却鲜为人知。例如,午餐时食堂前的排队就是一个团队队列。

在团队队列中,每个元素都属于一个团队。当一个元素加入队列时,它会从头到尾搜索队列,检查是否有同队成员(同一团队的元素)已经在队列中。如果有,它会直接排在该队友的后面;如果没有,它会加入队列的末尾,成为新的最后一个元素(运气不佳)。出队操作与普通队列相同:按照元素在团队队列中出现的顺序,从头到尾依次处理。

你的任务是编写一个程序来模拟这样的团队队列。

输入

输入包含一个或多个测试用例。每个测试用例以团队数量 tt1t10001 \leq t \leq 1000)开始。接下来是 tt 个团队的描述,每个描述包含该团队的元素数量及元素本身。元素是 00999999999999 之间的整数,每个团队最多包含 10001000 个元素。

最后是一系列命令,共有三种类型:

  • ENQUEUE x —— 将元素 xx 加入团队队列
  • DEQUEUE —— 处理并移除队列中的第一个元素
  • STOP —— 结束当前测试用例

输入以 t=0t=0 终止。

警告:一个测试用例可能包含多达 200000200000(二十万)条命令,因此团队队列的实现必须高效——元素的入队和出队操作都应在常数时间内完成。

输出

对于每个测试用例,首先输出一行 “Scenario #k”,其中 kk 是测试用例的编号。接着,对于每条 DEQUEUE 命令,输出被移除的元素。每个测试用例结束后,即使它是最后一个,也要输出一个空行。

示例输入 1

2
3 101 102 103
3 201 202 203
ENQUEUE 101
ENQUEUE 201
ENQUEUE 102
ENQUEUE 202
ENQUEUE 103
ENQUEUE 203
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
2
5 259001 259002 259003 259004 259005
6 260001 260002 260003 260004 260005 260006
ENQUEUE 259001
ENQUEUE 260001
ENQUEUE 259002
ENQUEUE 259003
ENQUEUE 259004
ENQUEUE 259005
DEQUEUE
DEQUEUE
ENQUEUE 260002
ENQUEUE 260003
DEQUEUE
DEQUEUE
DEQUEUE
DEQUEUE
STOP
0

示例输出 1

Scenario #1
101
102
103
201
202
203

Scenario #2
259001
259002
259003
259004
259005
260001

来源
Ulm Local 1998