Official

A - 目標スコアへの道 / Path to the Target Score Editorial by admin

GPT 5.2 High

概要

現在のスコア \(A\) を最低必要スコア \(B\) 以上にするために、不足分だけスコアブースターを購入したときの最小コイン数を求める問題です。

考察

スコアブースターを \(1\) 個使うとスコアが \(1\) 増えるので、必要な個数は「不足している点数」と一致します。

  • もし \(A \ge B\) なら、すでに条件を満たしているため購入は不要で、答えは \(0\) です。
  • もし \(A < B\) なら、あと \(B-A\) 点必要なので、ブースターは \(B-A\) 個必要です。
    したがってコイン数は \((B-A)\times C\) になります。

素朴に「スコアが \(B\) に到達するまで 1 点ずつ増やす(ループする)」実装でも正しいですが、\(B-A\) が最大で \(10^9\) になり得るため、ループ回数が多すぎて実行時間が間に合いません(TLEの原因)。
不足分は数式で一発計算できるので、ループを使わずに求めます。

例: - \(A=7, B=10, C=3\) のとき、不足は \(10-7=3\) 点 → 必要コイン数は \(3\times 3=9\)。 - \(A=12, B=10, C=5\) のとき、すでに満たす → \(0\)

アルゴリズム

  1. 不足点数 \(need = \max(0, B-A)\) を計算する。
  2. 答えとして \(need \times C\) を出力する。

計算量

  • 時間計算量: \(O(1)\)
  • 空間計算量: \(O(1)\)

実装のポイント

  • \(A \ge B\) の場合に負の値にならないよう、\(need=\max(0, B-A)\) とするのが安全です。

  • 制約は最大 \(10^9\) ですが、積 \((B-A)\times C\) は最大で \(10^{18}\) 程度になり得ます。Pythonの int は桁あふれしないのでそのままで問題ありません。

    ソースコード

import sys

def main():
    A, B, C = map(int, sys.stdin.readline().split())
    need = max(0, B - A)
    print(need * C)

if __name__ == "__main__":
    main()

この解説は gpt-5.2-high によって生成されました。

posted:
last update: