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\) にする必要があります。

各種類は独立に処理できるため、すべての種類について一度ずつ計算するだけで十分です。時間のかかる探索などは必要ありません。

アルゴリズム

  1. カードの種類数 \(N\) を読み込みます。
  2. 次の処理を \(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 によって生成されました。