N 人,身份证号码为 1、2、...,N,正在银行前排队。 会有 O 事件。可能会发生以下三种事件。 • 1:出纳员呼叫具有最小身份证号码但未被呼叫的人。 • 2 x:身份证号码为 a 的人第一次来到柜员处。(在这里,出纳员至少已经叫过一次人A。 • 3:出纳员再次呼叫已经呼叫但尚未来的具有最小身份证号码的人。 打印出纳员在第三种事件中呼叫的人员的身份证号码。
时间: 2023-05-11 09:03:44 浏览: 98
这是一个经典的队列问题,可以使用队列来解决。具体实现如下:
首先,定义一个队列来存储排队的人的身份证号码。然后,根据不同的事件类型,进行相应的操作。
对于事件1,出纳员呼叫具有最小身份证号码但未被呼叫的人,可以从队列中取出最小的身份证号码,即队列的头部元素。
对于事件2,身份证号码为a的人第一次来到柜员处,可以将身份证号码a加入队列中。
对于事件3,出纳员再次呼叫已经呼叫但尚未来的具有最小身份证号码的人,可以先取出队列的头部元素,判断其是否已经被呼叫过,如果是,则继续取出下一个元素,直到找到一个未被呼叫过的元素为止。
最后,输出找到的具有最小身份证号码且未被呼叫过的人的身份证号码即可。
下面是具体的代码实现:
```python
queue = [] # 定义一个队列来存储排队的人的身份证号码
# 处理事件
for i in range(O):
event = input().split()
if event[0] == '1':
# 出纳员呼叫具有最小身份证号码但未被呼叫的人
while queue and queue[0] == 'called':
queue.pop(0)
if queue:
print(queue[0])
queue[0] = 'called'
elif event[0] == '2':
# 身份证号码为a的人第一次来到柜员处
queue.append(event[1])
elif event[0] == '3':
# 出纳员再次呼叫已经呼叫但尚未来的具有最小身份证号码的人
while queue and queue[0] == 'called':
queue.pop(0)
if queue:
print(queue[0])
queue[0] = 'called'
```
注意,这里的代码只是一个示例,具体实现可能会因为输入格式等原因而有所不同。