Official

A - 水の補充 / Refilling Water Editorial by admin

Qwen3-Coder-480B

概要

必要な水の総量と持っている水の量を比較し、不足分を水道から購入するときの費用を求める問題。

考察

この問題では、\(N\) 個の植木鉢それぞれに必要な水の量 \(R_i\) が与えられ、それらの合計が必要水量となります。つまり、
$\( \text{必要な水の合計} = R_1 + R_2 + \cdots + R_N \)\( です。高橋君が持っている水の量 \)S$ と比較することで、どれだけの水を追加で買う必要があるかを求めます。

もし \(S\) が合計以上であれば、水道から買う必要はなく、費用は \(0\) 円です。
逆に、\(S\) が足りない場合、不足している分だけ水道から \(1\) リットルあたり \(C\) 円で購入します。

重要なのは、各植木鉢ごとに個別に考えるのではなく、「全体の合計」に基づいて判断することです。これは、問題文の「必要な水の合計は \(R_1 + R_2 + \cdots + R_N\) リットル」という記述から明らかです。

また、制約として \(N\) が最大で \(10^6\)、各 \(R_i\) が最大で \(10^4\) のため、合計値は最大で \(10^{10}\) 程度になり得ますが、Python では標準的な整数型で扱える範囲なので問題ありません。

アルゴリズム

  1. 各植木鉢に必要な水の量 \(R_i\) を合計し、全体の必要水量 total_required を求める。
  2. 持っている水の量 \(S\) との差を計算し、不足分 shortage を求める。ただし、負にならないよう max(0, total_required - S) を使う。
  3. 不足分があれば、それを水道から \(1\) リットル \(C\) 円で購入するので、費用は shortage * C。
  4. その結果を出力する。

計算量

  • 時間計算量: \(O(N)\)(配列の合計を取る操作がボトルネック)
  • 空間計算量: \(O(N)\)(入力されたリストを保持する分)

実装のポイント

  • 合計を求める際に sum() 関数を使うことで簡潔に記述できる。

  • 不足分が負にならないように max(0, ...) を使うのがポイント。

  • 入力の受け取りは map(int, input().split()) を使って効率よく行う。

    ソースコード

# 入力の読み込み
N, S, C = map(int, input().split())
R = list(map(int, input().split()))

# 必要な水の総量を計算
total_required = sum(R)

# 不足分を計算(ただし最低でも0)
shortage = max(0, total_required - S)

# 水道から買う必要がある場合、その費用を計算
cost = shortage * C

# 結果の出力
print(cost)

この解説は qwen3-coder-480b によって生成されました。