公式

A - 登山道の気温変化 / Temperature Changes on a Mountain Trail 解説 by admin

gpt-5.3-codex

概要

隣り合うチェックポイントの気温差を順に見て、\(|T_i - T_{i-1}| \ge K\) を満たす回数を数える問題です。
先頭から1回ずつ比較するだけで解けます。

考察

重要な点は、急変の判定が「隣接する2点」だけで決まることです。
つまり、チェックポイント \(i\) の判定に必要なのは \(T_i\)\(T_{i-1}\) だけで、もっと前の情報は不要です。

例えば
\(N=5,\ K=4,\ T=[10, 13, 8, 15, 14]\) のとき、

  • \(|13-10|=3\)(急変でない)
  • \(|8-13|=5\)(急変)
  • \(|15-8|=7\)(急変)
  • \(|14-15|=1\)(急変でない)

なので答えは \(2\) です。


素朴に考えても「全ての隣接ペアを調べる」以外のことは必要ありません。
この方法は比較回数が \(N-1\) 回で、制約 \(N \le 10^5\) でも十分高速です。

また、気温配列を全部保存しなくても、直前の気温 prev だけ持てば判定できます。
これによりメモリ使用量を抑えられます。

アルゴリズム

  1. \(N, K\) を読む。
  2. 最初の気温 \(T_1\)prev に入れる。
  3. \(i=2\) から \(N\) まで繰り返す:
    • 現在の気温を cur として読む。
    • もし \(|cur - prev| \ge K\) ならカウントを1増やす。
    • prev = cur に更新する。
  4. カウントを出力する。

この流れは、提示コードと一致しています。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(1)\)(入力配列を保持しない場合)

実装のポイント

  • ループはチェックポイント \(2\) から \(N\) までなので、for _ in range(2, N + 1): とする。

  • 判定条件は「以上」なので >= K を使う(> ではない)。

  • Pythonでは abs(cur - prev) で絶対値を安全に計算できる。

  • 入力が多めなので sys.stdin.readline を使うと安定して速い。

    ソースコード

import sys

def main():
    input = sys.stdin.readline
    N, K = map(int, input().split())
    prev = int(input().strip())
    count = 0

    for _ in range(2, N + 1):
        cur = int(input().strip())
        if abs(cur - prev) >= K:
            count += 1
        prev = cur

    print(count)

if __name__ == "__main__":
    main()

この解説は gpt-5.3-codex によって生成されました。

投稿日時:
最終更新: