A - 台風の被害調査 / Typhoon Damage Survey 解説 by admin
Qwen3-Coder-480B概要
各果樹の高さと復旧コストが与えられ、高さが \(T\) 以下の果樹が倒れたとして、それらをすべて植え直すのにかかる総コストを求めます。
考察
この問題では、各果樹について「高さが \(T\) 以下かどうか」を判定し、条件を満たすもの(つまり倒れた果樹)の復旧コストを合計すれば良いです。
素朴な方法としては、すべての果樹について順番に確認して、該当するものがあればコストを加算していく方法があります。これは特に工夫が必要なわけではなく、制約を見ても最大で \(N = 2 \times 10^5\) なので、各要素に対して定数時間の処理を行っても間に合います。
この問題で落とし穴になりうるのは、入力の受け取り方やループの範囲のミスですが、適切にリストを処理すれば簡単に解けます。
アルゴリズム
- 果樹の本数 \(N\) と倒れる高さの基準 \(T\) を読み込む。
- 各果樹の高さ \(H_i\) とコスト \(C_i\) をリストとして読み込む。
- 各果樹 \(i\) について、\(H_i \leq T\) なら \(C_i\) を総コストに加算する。
- 最終的な総コストを出力する。
例えば、入力が以下のようだったとします:
N=4, T=5
H = [3, 7, 5, 6]
C = [10, 20, 30, 40]
このとき、\(H_1=3 \leq 5\)、\(H_3=5 \leq 5\) なので、果樹1と3が倒れています。
対応するコストは \(C_1=10\)、\(C_3=30\) なので、総コストは \(10 + 30 = 40\) となります。
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: \(O(N)\)
各要素に対して1回ずつチェックを行うので、線形時間で処理できます。入力の格納に \(O(N)\) のメモリが必要です。
実装のポイント
入力を正しく読み込めているか確認しましょう(特にリストのインデックス)。
条件分岐
if H[i] <= T:で大小関係を間違えないように注意してください。総和変数
total_costは初期化忘れずに。ソースコード
# 入力の読み込み
N, T = map(int, input().split())
H = list(map(int, input().split()))
C = list(map(int, input().split()))
# 総コストの計算
total_cost = 0
for i in range(N):
if H[i] <= T:
total_cost += C[i]
# 結果の出力
print(total_cost)
この解説は qwen3-coder-480b によって生成されました。
投稿日時:
最終更新: