北航 实验任务 5-3 hwjj 回消息

  • 题目背景 hwjj 作为《大学计算机基础》的助教组长,每天在微信上向他请教问题的大一同
    学非常多,请你帮他记录一下他回消息的名单。

  • 题目描述:
    最开始时,hwjj 的微信是没有未读消息的。之后在每一个时刻,hwjj 的手机只 能处于以下三个状态的一种:接收消息,回复消息,或者什么都不做。这是由于 hwjj的手机太卡了,若某一时刻手机需要接收消息,则他就无法执行回复消息的操作;只要该时刻可以执行回复消息的操作且当前仍有未回复的消息,hwjj总会尝试挑选最新的消息来回复,在这一时刻回复完毕并把这个聊天框删除,当然这一时刻 hwjj 只能回复一个人的消息。按顺序给出 hwjj 将要接收到的来信人以及相应时刻,请你按照
    hwjj 回复他们的时间输出一份名单。

  • 输入格式:
    一共n+1行。第一行为一个正整数 n,表明会有 n 个人给 hwjj 发消息。
    接下来的 n 行,每行用空格隔开的一个整数 b 和一个字符串 s,表示在 b 时刻名字为 s 的人给 hwjj 发了消息 (b<10000)。

  • 输出格式:
    输出共 n 行,每行为用空格隔开的一个整数 c 和一个字符串 s1,表示在 c 时 刻名字为 s1 的人收到了 hwjj 的回复。

  • 输入样例 1: 5

    1 lice
    2 ob
    3 om
    5 rown
    8 ack

  • 输出样例 1:

    4 om
    6 rown
    7 ob
    9 ack
    10 lice

  • 输入样例 2:

    3
    1 hwgg
    4 hwdd
    5 hwmm

  • 输出样例 2:

    2 hwgg
    6 hwmm
    7 hwdd

  • 说明/提示

    保证每个人名最多只会出现一次,且每个时刻最多只有一个人给 hwjj 发消息。
    保证输入的名单是按照时间从小到大的顺序。且每个人的名字均只由大小写字母
    组成,名字长度不超过 10。

  • 实验指导:

  1. 本题在处理消息时,会优先处理最新收到的消息,这实质上是一个“栈”结构,
    接收消息时入栈,回复消息时出栈。
  2. 判断列表是否为空可以利用len函数。
class Stack(object):

    def __init__(self):
        # 创建空列表实现栈
        self.__list = []

    def is_empty(self):
        # 判断是否为空
        return self.__list == []

    def push(self, item):
        # 压栈,添加元素
        self.__list.append(item)

    def pop(self):
        # 弹栈,弹出最后压入栈的元素
        if self.is_empty():
            return
        else:
            return self.__list.pop()

    def top(self):
        # 取最后压入栈的元素
        if self.is_empty():
            return
        else:
            return self.__list[-1]


data = []
stack = Stack()
lens = input()
for i in range(int(lens)):
    item = input()
    data.append(item.split(" "))
while len(data) > 0:
    item = data.pop(0)
    if stack.is_empty():
        stack.push(item)
    elif int(item[0]) - int(stack.top()[0]) == 1:
        stack.push(item)
    else:
        i = int(item[0]) - int(stack.top()[0]) - 1
        start = int(stack.top()[0])
        for m in range(i):
            if not stack.is_empty():
                top = stack.pop()
                time = int(top[0])
                user = top[1]
                print(start + 1 + m, user)
        stack.push(item)
# print("---------------------------------")
# print(stack)
i = 1
start = 0
if not stack.is_empty():
    start = int(stack.top()[0])
while not stack.is_empty():
    top = stack.pop()
    time = int(top[0])
    user = top[1]
    print(start + i, user)
    i += 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值