AtCoder ABC 149 B – Greedy Takahashi Python解説

スポンサーリンク

Greedy Takahashi

高橋君は A 枚、青木君は B 枚のクッキーを持っています。
高橋君は以下の行動を K 回繰り返します。もし高橋君がクッキーを 1 枚以上持っているなら、高橋君のクッキーを 1 枚食べる。そうでなく、もし青木君がクッキーを 1 枚以上持っているなら、青木君のクッキーを 1 枚食べる。高橋君も青木君もクッキーを持っていないなら、何もしない。
高橋君と青木君が最終的に持っているクッキーの枚数をそれぞれ求めてください。

AtCoder Beginner Contest 「Greedy Takahashi」

今回の問題で与えられる入力は0<= A,B,K <= 10^12と計算量が多くなるので、高橋君が持っているクッキーを1枚ずつ食べていくと実行時間が間に合いません。ですので、持っているクッキーは1枚ずつ確認するのではなく、直接引いてしまった方がいいです。

a, b, k = map(int, input().split())

ans_a = max(0, a - k)
k -= min(a, k)
ans_b = max(0, b - k)

print(ans_a, ans_b)

クッキーは0枚より少なくなることはないので、ans_a = max(0, a – k)の計算結果が高橋君が最終的に持つクッキーの枚数になります。高橋君のクッキーがなくなった場合、k -= min(a, k)の結果分、青木君のクッキーを食べます。最後にans_b = max(0, b – k)を計算すれば高橋君と青木君が最終的に持つクッキーの枚数が得られます。