题目描述
某物流中心交叉轨道有四条单向支轨:North、South、East、West,所有货车按序排队通过该路口。为保证高效、有序,调度台需要实时响应值班员的指令,请实现该调度台的运行逻辑,帮助值班员了解情况和避免拥堵。
接收输入初始化四条队列,方向分别为 North、South、East、West。
设计程序对每条指令作出响应,指令包括入队,放行,查询队列车辆编号。指令格式如下:。
将编号为id的车辆入队direction方向队列:E direction id
查询direction方向剩余车辆编号:Q direction
放行最长队列前k辆:S k
放行时选择最长队列放行,最长队列长度相同则按 NSEW顺序(North>South>East>West) 放行。若队列长度不足 k,全部放行。
输入
共N+5行:
第1~4行为四个方向初始队列情况,NSEW顺序,每行不同车辆名称以空格分隔(空行表示无车辆)
第5行开始一个正整数 N,表示指令总数。
再随后 N 行,每行一条指令。
数据范围:车辆编号不含空格N ≤ 100,1 ≤ k ≤ 10
输出
对于每条 Q 指令输出一行,表示所查询方向剩余车辆的编号,格式为“[id1, id2, ...idn]”,编号间以逗号空格分隔。
最后输出各方向队列最终状态,输出四行,等价于NSEW顺序执行 Q 指令。
输入样例1
A12B N99X
W01C W02D W03E
7
E South S44T
S 2
Q South
E East E88Z
S 1
Q North
Q East
输出样例1
[S44T]
[N99X]
[E88Z]
[N99X]
[S44T]
[E88Z]
[W03E]
输入样例2
7H9xK 0f 3nZq8 9L j1m VR2x wQ4
p5tb F3k 9aX zY 2l J7h 5qS 8x 1c
M n9 4B Q7 2u E5w 6L 0z
5Kj 8t 3X 9r H 1q 7n 2Z 0P 4w 6G
12
E North J8k2F
E South 9xQ3Lm
S 3
E East 7vT
Q North
S 2
Q South
E West 4bL4b
Q East
S 9
Q West
Q North
输出样例2
[7H9xK, 0f, 3nZq8, 9L, j1m, VR2x, wQ4, J8k2F]
[9aX, zY, 2l, J7h, 5qS, 8x, 1c, 9xQ3Lm]
[M, n9, 4B, Q7, 2u, E5w, 6L, 0z, 7vT]
[9r, H, 1q, 7n, 2Z, 0P, 4w, 6G, 4bL4b]
[7H9xK, 0f, 3nZq8, 9L, j1m, VR2x, wQ4, J8k2F]
[7H9xK, 0f, 3nZq8, 9L, j1m, VR2x, wQ4, J8k2F]
[9aX, zY, 2l, J7h, 5qS, 8x, 1c, 9xQ3Lm]
[]
[9r, H, 1q, 7n, 2Z, 0P, 4w, 6G, 4bL4b]
样例解释
在样例1中,North有车辆[A12B, N99X],South和East方向初始无车,West有车辆[W01C, W02D, W03E]。
1.执行“E South S44T”:South队列加入S44T,则South队列从[]变为[S44T];
2. 执行“S 2”:最长队列是West(3辆)>North(2辆),放行West前2辆:W01C, W02D。West剩余[W03E];
3. 执行“Q South”:输出South队列:[S44T];
4. 执行“E East E88Z”:East队列加入E88Z,East队列从[]变为[E88Z];
5. 执行“S 1”:最长队列是North(2辆)≥South(1辆)>East(1辆),按优先级选North,放行N99X;
6. 执行“Q North”:输出North队列:[A12B];
7. 执行“Q East”:输出East队列:[E88Z]。
Hint
1.使用如下代码初始化字典“queues = {'North': input().split(),'South': input().split(),'East': input().split(),'West': input().split()}”,之后可直接使用“queues[direction]”调用对应方向列表。
2.采用一个嵌套列表cmd存储输入的所有指令;采用一个列表result存储所有Q指令的查询结果。遍历列表cmd:根据指令执行相应操作,并将Q指令的查询结果添加到列表result中;然后输出所有查询结果;最后按North South East West顺序输出各队列最终状态。
3.使用“'x'.join(list)”可以将列表中元素以“x”字符为分隔输出。
代码是:queues = {
'North': input().split(),
'South': input().split(),
'East': input().split(),
'West': input().split()
}
n = int(input())
result = []
for _ in range(n):
s = input().split()
order = s[0]
if order == 'E':
direction = s[1]
people = s[3:]
queues[direction].extend(people)
elif order == 'Q':
direction = s[1]
result.append(queues[direction][:])
elif order == 'S':
k = int(s[1])
candidates = []
priority_map = {'North': 1, 'South': 2, 'East': 3, 'West': 4}
for name, queue in queues.items():
candidates.append((name, queue, len(queue), priority_map[name]))
candidates.sort(key=lambda x: (x[2], x[3]))
target_name, target_queue, length, _ = candidates[0]
if length <= k:
queues[target_name] = []
else:
queues[target_name] = target_queue[k:]
result.append(queues[target_name])
for res in result:
print(' '.join(res))