Official

A - カードを揃える / Collecting Cards Editorial by admin Editorial for printing

gpt-6-astra-medium

概要

各種類のカードについて、必要枚数と現在の枚数を比較し、不足している枚数を出力します。すでに必要枚数以上持っている場合は \(0\) を出力します。

考察

\(i\) 種類目のカードは \(A_i\) 枚必要で、現在 \(B_i\) 枚持っています。

  • \(B_i < A_i\) の場合、不足している \(A_i - B_i\) 枚を買えば揃います。
  • \(B_i \geq A_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\) を読み込みます。
    • \(B_i \geq A_i\) なら \(0\) を出力します。
    • そうでなければ \(A_i - B_i\) を出力します。

計算量

  • 時間計算量: \(O(N)\)
    各種類について、比較と引き算を定数回行います。
  • 空間計算量: \(O(1)\)
    入力を一組ずつ処理するため、配列に保存する必要はありません。

実装のポイント

  • コードの need が必要枚数 \(A_i\)、have が現在の枚数 \(B_i\) に対応します。

  • have >= need とすることで、ちょうど必要枚数を持っている場合も \(0\) を出力できます。

  • 不足枚数は need - have です。引き算の順序を逆にしないように注意してください。

  • 答えは種類ごとに改行し、合計 \(N\) 行出力します。

    ソースコード

// 問題文から独立に実装: 足りていれば 0、そうでなければ差
#include <iostream>
int main() {
    int n; std::cin >> n;
    while (n--) {
        int need, have; std::cin >> need >> have;
        if (have >= need) std::cout << 0 << "\n";
        else std::cout << need - have << "\n";
    }
}


この解説は gpt-6-astra-medium によって生成されました。

posted:
last update: