Official

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

Claude 4.5 Opus

概要

現在のスコアを目標スコアまで上げるために必要なコイン数を計算する問題です。スコアが足りない分だけアイテムを購入し、その総コストを求めます。

考察

この問題を解くために、以下の点に注目します。

重要な気づき

  1. すでに目標達成している場合: 現在のスコア \(A\) が目標スコア \(B\) 以上なら、アイテムを買う必要はありません(コスト \(0\)
  2. スコアが足りない場合: 目標スコア \(B\) に到達するために必要なスコアの増加量は \(B - A\) 点です
  3. 必要なアイテム数: スコアブースター \(1\) 個で \(1\) 点増えるので、必要なアイテム数は \((B - A)\) 個です
  4. 総コスト: アイテム \(1\) 個が \(C\) コインなので、総コストは \((B - A) \times C\) コインです

具体例で確認

例えば、\(A = 30\)(現在のスコア)、\(B = 50\)(目標スコア)、\(C = 10\)(アイテムの価格)の場合: - 必要なスコア増加量: \(50 - 30 = 20\) 点 - 必要なアイテム数: \(20\) 個 - 総コスト: \(20 \times 10 = 200\) コイン

この問題が簡単な理由

この問題では、素朴なアプローチがそのまま最適解になります。スコアを上げる方法がスコアブースターしかないため、必要最小限の個数だけ買えばよいという単純な構造になっています。

アルゴリズム

  1. \(A\)\(B\)\(C\) を入力として受け取る
  2. \(A \geq B\) の場合(すでに目標達成済み):
    • \(0\) を出力
  3. \(A < B\) の場合(スコアが足りない):
    • \((B - A) \times C\) を出力
if A >= B:
    答え = 0
else:
    答え = (B - A) * C

計算量

  • 時間計算量: \(O(1)\)
    • 入力の読み込みと、定数回の算術演算のみで済みます
  • 空間計算量: \(O(1)\)
    • 変数を数個使用するだけで、入力サイズに依存しません

実装のポイント

  • オーバーフローに注意: 制約より \(B - A\)\(C\) はそれぞれ最大で約 \(10^9\) になりえます。その積は最大で約 \(10^{18}\) となりますが、Python では整数のオーバーフローが発生しないため、特別な対策は不要です。C++ などの言語を使用する場合は long long 型を使う必要があります。

  • 場合分けを忘れない: \(A \geq B\) の場合に \(0\) を出力することを忘れると、負の値が出力されてしまいます。

    ソースコード

A, B, C = map(int, input().split())

if A >= B:
    print(0)
else:
    print((B - A) * C)

この解説は claude4.5opus によって生成されました。

posted:
last update: