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\))。特に枝刈りや複雑なデータ構造は必要ありません。
アルゴリズム
- 入力から \(N\), \(K\), 各ログの重要度 \(P_1, P_2, ..., P_N\) を受け取る。
- リスト \(P\) を先頭から順番に走査し、初めて \(P_i \geq K\) となるインデックス \(i\) を探す。
- 見つかればそのインデックス(1-indexed)を出力し、プログラムを終了させる。
- 全てのログを確認しても見つからなければ、\(-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: