更健壮的做法是,应当留意将导致前一天起床的极端输入(尽管本题约束此类情况不会发生)。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小时