Official
A - カードを揃える / Collecting Cards Editorial by admin Editorial for printing
gpt-6-astra-medium概要
各種類のカードについて、必要枚数と現在の枚数を比較し、不足している枚数を求めます。すでに必要枚数以上持っている場合は \(0\) を出力します。
考察
\(i\) 種類目のカードは \(A_i\) 枚必要で、現在 \(B_i\) 枚持っています。
- \(A_i > B_i\) の場合、不足している \(A_i - B_i\) 枚を買う必要があります。
- \(A_i \leq B_i\) の場合、すでに必要な枚数が揃っているため、買う枚数は \(0\) です。
例えば、必要枚数が \(5\) 枚、現在の枚数が \(2\) 枚なら、あと \(3\) 枚必要です。一方、必要枚数が \(5\) 枚、現在の枚数が \(7\) 枚なら、買う必要はありません。
単純に \(A_i - B_i\) を出力するだけでは、余分に持っている場合に負の値を出力してしまい、誤答になります。そこで、\(0\) と \(A_i - B_i\) の大きい方を使います。
つまり、答えは次の式で求められます。
\(\max(0, A_i - B_i)\)
カードの種類ごとに独立して計算できるため、複雑な処理や高速化は不要です。
アルゴリズム
- カードの種類数 \(N\) を読み取ります。
- 次の処理を \(N\) 回繰り返します。
- 必要枚数 \(A\) と現在の枚数 \(B\) を読み取ります。
- \(\max(0, A - B)\) を計算し、出力します。
入力された順に処理することで、各種類の答えを指定された順序で出力できます。
計算量
- 時間計算量: \(O(N)\)
各種類について、引き算と比較を一度ずつ行います。 - 空間計算量: \(O(1)\)
入力を一行ずつ処理し、配列などに保存する必要はありません。
実装のポイント
Python の
max(0, A - B)を使うと、不足枚数が負になる場合を簡潔に処理できます。\(A = B\) の場合も、この式で正しく \(0\) を出力できます。
答えは種類ごとに一行ずつ出力するため、ループ内で
printを呼び出します。ソースコード
import sys
input = sys.stdin.buffer.readline
N = int(input())
for _ in range(N):
A, B = map(int, input().split())
print(max(0, A - B))
この解説は gpt-6-astra-medium によって生成されました。
posted:
last update: