#P2259. Team Queue
Team Queue
描述
队列(Queues)和优先队列(Priority Queues)是大多数计算机科学家所熟知的数据结构。然而,团队队列(Team Queue) 虽然常出现在日常生活中,却鲜为人知。例如,午餐时食堂前的排队就是一个团队队列。
在团队队列中,每个元素都属于一个团队。当一个元素加入队列时,它会从头到尾搜索队列,检查是否有同队成员(同一团队的元素)已经在队列中。如果有,它会直接排在该队友的后面;如果没有,它会加入队列的末尾,成为新的最后一个元素(运气不佳)。出队操作与普通队列相同:按照元素在团队队列中出现的顺序,从头到尾依次处理。
你的任务是编写一个程序来模拟这样的团队队列。
输入
输入包含一个或多个测试用例。每个测试用例以团队数量 ()开始。接下来是 个团队的描述,每个描述包含该团队的元素数量及元素本身。元素是 到 之间的整数,每个团队最多包含 个元素。
最后是一系列命令,共有三种类型:
- ENQUEUE x —— 将元素 加入团队队列
- DEQUEUE —— 处理并移除队列中的第一个元素
- STOP —— 结束当前测试用例
输入以 终止。
警告:一个测试用例可能包含多达 (二十万)条命令,因此团队队列的实现必须高效——元素的入队和出队操作都应在常数时间内完成。
输出
对于每个测试用例,首先输出一行 “Scenario #k”,其中 是测试用例的编号。接着,对于每条 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