公式

A - 台風の被害調査 / Typhoon Damage Survey 解説 by admin

Qwen3-Coder-480B

概要

各果樹の高さと復旧コストが与えられ、高さが \(T\) 以下の果樹が倒れたとして、それらをすべて植え直すのにかかる総コストを求めます。

考察

この問題では、各果樹について「高さが \(T\) 以下かどうか」を判定し、条件を満たすもの(つまり倒れた果樹)の復旧コストを合計すれば良いです。

素朴な方法としては、すべての果樹について順番に確認して、該当するものがあればコストを加算していく方法があります。これは特に工夫が必要なわけではなく、制約を見ても最大で \(N = 2 \times 10^5\) なので、各要素に対して定数時間の処理を行っても間に合います。

この問題で落とし穴になりうるのは、入力の受け取り方やループの範囲のミスですが、適切にリストを処理すれば簡単に解けます。

アルゴリズム

  1. 果樹の本数 \(N\) と倒れる高さの基準 \(T\) を読み込む。
  2. 各果樹の高さ \(H_i\) とコスト \(C_i\) をリストとして読み込む。
  3. 各果樹 \(i\) について、\(H_i \leq T\) なら \(C_i\) を総コストに加算する。
  4. 最終的な総コストを出力する。

例えば、入力が以下のようだったとします:

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 によって生成されました。

投稿日時:
最終更新: