Official

B - 最初のアラート / First Alert Editorial by admin

Qwen3-Coder-480B

概要

最初に重要度が閾値 \(K\) 以上になるログの番号を求めよ。なければ \(-1\) を出力。

考察

この問題では、\(N\) 個のログが順番に与えられ、それぞれに重要度 \(P_i\) が設定されています。高橋君は重要度が \(K\) 以上のログを見つけ次第、ただちにアラートを出し、それ以降のログは一切無視します。

したがって、前から順番に見て行って、初めて \(P_i \geq K\) となる \(i\) を探せばよいです。見つけたらそのインデックス(1-indexed)を出力し、プログラムを終了させます。もし最後まで見つからなければ、\(-1\) を出力すればよいです。

素朴な方法でも十分高速です。なぜなら、最大でも \(N\) 回のチェックだけで済むからです(\(N \leq 2 \times 10^5\))。特に枝刈りや複雑なデータ構造は必要ありません。

アルゴリズム

  1. 入力から \(N\), \(K\), 各ログの重要度 \(P_1, P_2, ..., P_N\) を受け取る。
  2. リスト \(P\) を先頭から順番に走査し、初めて \(P_i \geq K\) となるインデックス \(i\) を探す。
  3. 見つかればそのインデックス(1-indexed)を出力し、プログラムを終了させる。
  4. 全てのログを確認しても見つからなければ、\(-1\) を出力する。

計算量

  • 時間計算量: \(O(N)\)
  • 空間計算量: \(O(N)\)

実装のポイント

  • 1-indexedで出力する必要があるため、インデックスに \(+1\) することを忘れない。

  • exit() を使うことで、条件を満たすログを見つけたら即座にプログラムを終了できる。

    ソースコード

N, K = map(int, input().split())
P = list(map(int, input().split()))

for i in range(N):
    if P[i] >= K:
        print(i + 1)
        exit()

print(-1)

この解説は qwen3-coder-480b によって生成されました。

posted:
last update: