AtCoder ABC 185 B – Smartphone Addiction Python解説

スポンサーリンク

Smartphone Addiction

高橋君のスマートフォンのバッテリー容量は N [mAh] であり、時刻 0.5,1.5,2.5,… に、つまり時刻 n+0.5(n は整数) を迎える度にバッテリー残量が 1 [mAh] ずつ減少します。
高橋君はスマートフォンを満充電した状態で時刻 0 に外出し、途中で M 回カフェを訪れ、時刻 T に帰宅します。
i 回目に訪れるカフェには時刻 Aiから時刻 Biまで滞在します。カフェに滞在している間はスマートフォンを充電するため、バッテリー残量は減少せず、代わりに時刻 n+0.5(n は整数) を迎える度に 1 [mAh] ずつ増加します。ただし既にバッテリー残量がバッテリー容量と等しい場合、バッテリー残量は増えも減りもしません。
高橋君が途中でスマートフォンのバッテリー残量が 0 になることなく帰宅することができるかを判定してください。

AtCoder Beginner Contest 「Smartphone Addiction」

やる事としては、外出中はバッテリーが減るのでバッテリーが0になっていないか確認、カフェでは充電できるがバッテリー容量以上は増えないことに注意、最後に帰宅途中でバッテリーが0になっていないかの確認です。

n, m, t = map(int, input().split())

time = 0
battery = n
flag = True

for _ in range(m):
    a, b = map(int, input().split())
    
    #外出時
    battery -= a - time
    if battery <= 0:
        flag = False
        
    #カフェ    
    battery += b - a
    battery = min(n, battery)
    time = b
    
#帰宅途中
battery -= t - time
if battery <= 0:
    flag = False
    
print("Yes" if flag else "No")

変数はtimeで時間管理、batteryはバッテリー残量です。nはフル充電時のバッテリー容量としてbatteryと使い分けています。最後にバッテリーが0にならないかflagで管理します。

for文の中では問題文通りに実装していきます。外出時は外出時間文バッテリーを減らし、残量が0以下になっていないか確認しています。カフェでは滞在時間分バッテリーを充電し、容量を超えていないか確認しています。最後に帰宅時間分バッテリーを減らし、残量が0以下になっていないか確認して完了です。