スマートフォンを満充電した状態で時刻0に外出した高橋君が、バッテリー残量が0になることなく帰宅することができるかどうかを判定する問題です。
提出
n, m, t = map(int, input().split())
now = 0
y = n
for i in range(m):
a, b = map(int, input().split())
y -= a-now
if y <= 0: print("No") exit() y += b-a if y >= n:
y = n
now = b
y -= t-now
if y <= 0:
print("No")
else:
print("Yes")
バッテリー残量は、時刻「n+0.5 (nは整数)」を迎えるたびに1ずつ増減します。
時刻1で1ずつ増減すると考え、バッテリー残量が0以下であれば間に合っていない判定をします。
まず、カフェに到着した時刻Aiのバッテリー残量yを求めます。
y -= a-now
if y <= 0:
print("No")
exit()
ここで0以下であればプログラムは終了します。
続いて、カフェを出発する時刻Biのバッテリー残量を求めます。
y += b-a
if y >= n:
y = n
now = b
バッテリー容量はNであるので、残量はN以上にはなりません。
これを帰宅するまでループさせて、最後に帰宅したときのバッテリー残量を判定して、結果を出力します。