公式
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 だけ持てば判定できます。
これによりメモリ使用量を抑えられます。
アルゴリズム
- \(N, K\) を読む。
- 最初の気温 \(T_1\) を
prevに入れる。 - \(i=2\) から \(N\) まで繰り返す:
- 現在の気温を
curとして読む。 - もし \(|cur - prev| \ge K\) ならカウントを1増やす。
prev = curに更新する。
- 現在の気温を
- カウントを出力する。
この流れは、提示コードと一致しています。
計算量
- 時間計算量: \(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 によって生成されました。
投稿日時:
最終更新: