A - 水の補充 / Refilling Water 解説 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 では標準的な整数型で扱える範囲なので問題ありません。
アルゴリズム
- 各植木鉢に必要な水の量 \(R_i\) を合計し、全体の必要水量
total_requiredを求める。 - 持っている水の量 \(S\) との差を計算し、不足分
shortageを求める。ただし、負にならないようmax(0, total_required - S)を使う。 - 不足分があれば、それを水道から \(1\) リットル \(C\) 円で購入するので、費用は
shortage * C。 - その結果を出力する。
計算量
- 時間計算量: \(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 によって生成されました。
投稿日時:
最終更新: