更健壮的做法是,应当留意将导致前一天起床的极端输入(尽管本题约束此类情况不会发生)。python 20行可解决。

把小时数和分钟数直接化成用分钟计时;遍历闹钟组,选出不会导致迟到的闹钟,筛选最晚的闹钟即可。【复杂度O(n)】

# 做一个一天72小时的虚拟,即所有时钟全部加24小时,直接覆盖昨今明三天
# 主要是为了避免需要在前一天起床的情况
N = int(input())
clocks = []
for _ in range(N):
    Hi, Mi = map(int, input().split()) # 闹钟响起的时分
    clocks.append((Hi+24, Mi))
X = int(input()) # 起床消耗时间
A, B = map(int, input().split()) # 上课的时分
A += 24

mins_to_get_up = A*60+B-X # 不会迟到的极限起床时间(换算成分)
res = 0
for a, b in clocks:
    if a*60+b > mins_to_get_up: continue # 会导致迟到的闹钟
    res = max(a*60+b, res) # 合法闹钟且最晚

print(res//60-24, res%60) # 输出时需要减去之前加上的24小时