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)\)

カードの種類ごとに独立して計算できるため、複雑な処理や高速化は不要です。

アルゴリズム

  1. カードの種類数 \(N\) を読み取ります。
  2. 次の処理を \(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: