Official
A - カードを揃える / Collecting Cards Editorial by admin
gpt-6-astra-medium概要
各種類のカードについて、必要な枚数から現在持っている枚数を引き、不足している枚数を求めます。すでに必要な枚数以上持っている場合は \(0\) を出力します。
考察
\(i\) 種類目のカードは \(A_i\) 枚必要で、現在 \(B_i\) 枚持っています。
- \(A_i > B_i\) の場合:カードが不足しているので、あと \(A_i - B_i\) 枚買う必要があります。
- \(A_i \leq B_i\) の場合:すでに必要な枚数が揃っているので、買う枚数は \(0\) 枚です。
したがって、答えは次の式で表せます。
\(\max(A_i - B_i, 0)\)
例えば、必要な枚数が \(5\) 枚、持っている枚数が \(2\) 枚なら、あと \(3\) 枚必要です。一方、必要な枚数が \(3\) 枚、持っている枚数が \(7\) 枚なら、買う必要はないので答えは \(0\) です。
単純に \(A_i - B_i\) を出力するだけでは、持っている枚数が多いときに負の値を出力してしまい、誤答になります。差が負になる場合は \(0\) にする必要があります。
各種類は独立に処理できるため、すべての種類について一度ずつ計算するだけで十分です。時間のかかる探索などは必要ありません。
アルゴリズム
- カードの種類数 \(N\) を読み込みます。
- 次の処理を \(N\) 回繰り返します。
- 必要な枚数 \(A_i\) と現在の枚数 \(B_i\) を読み込みます。
- \(A_i > B_i\) なら \(A_i - B_i\) を出力します。
- そうでなければ \(0\) を出力します。
この処理は、カードが不足している場合には不足分を、足りている場合には \(0\) を出力するので、各種類について正しい答えが得られます。
計算量
- 時間計算量: \(O(N)\)。各種類について定数回の比較・計算を行います。
- 空間計算量: \(O(1)\)。入力を一行ずつ処理するため、全種類の情報を保存する必要はありません。
実装のポイント
コードの a - b if a > b else 0 は、a > b が成り立つ場合には a - b、それ以外の場合には 0 を返す条件式です。
必要な枚数と持っている枚数が等しい場合も、答えは \(0\) になります。また、答えは合計するのではなく、入力された順に一種類につき一行ずつ出力します。
ソースコード
# 問題文から独立に実装
n = int(input())
for _ in range(n):
a, b = map(int, input().split())
print(a - b if a > b else 0)
この解説は gpt-6-astra-medium によって生成されました。