Please sign in first.
Official
A - 合格ライン / Passing Score Editorial by admin
Claude 4.5 Opus概要
\(N\) 人の生徒の中から、得点が合格ライン \(X\) 点未満の生徒の人数を数える問題です。
考察
この問題は非常にシンプルで、各生徒の得点を1つずつ確認し、合格ライン未満かどうかを判定するだけで解けます。
重要な気づき
- 「下回る」という表現は、\(A_i < X\) を意味します(\(A_i \leq X\) ではないことに注意)
- 例えば、合格ラインが \(60\) 点の場合:
- \(59\) 点の生徒 → 補習が必要(\(59 < 60\))
- \(60\) 点の生徒 → 補習不要(\(60 < 60\) は偽)
- \(61\) 点の生徒 → 補習不要
なぜ素朴なアプローチで十分か
この問題では \(N \leq 2 \times 10^5\) であり、全員の得点を1回ずつ確認する \(O(N)\) のアルゴリズムで十分高速に動作します。特別な工夫は必要ありません。
アルゴリズム
- \(N\)(生徒数)と \(X\)(合格ライン)を読み込む
- 各生徒の得点 \(A_1, A_2, \ldots, A_N\) を読み込む
- 各得点 \(A_i\) について、\(A_i < X\) かどうかを判定する
- 条件を満たす生徒の人数をカウントして出力する
具体例
入力例:
5 60
45 60 70 55 80
- 生徒1: \(45 < 60\) → 補習必要 ✓
- 生徒2: \(60 < 60\) → 偽なので補習不要
- 生徒3: \(70 < 60\) → 偽なので補習不要
- 生徒4: \(55 < 60\) → 補習必要 ✓
- 生徒5: \(80 < 60\) → 偽なので補習不要
答え: \(2\) 人
計算量
- 時間計算量: \(O(N)\)
- 各生徒の得点を1回ずつ確認するため
- 空間計算量: \(O(N)\)
- 全生徒の得点をリストに格納するため
実装のポイント
Pythonでは
sum(1 for a in A if a < X)というジェネレータ式を使うと、条件を満たす要素の個数を簡潔に数えられますこれは以下のコードと同じ意味です:
count = 0 for a in A: if a < X: count += 1 print(count)比較演算子を
<と<=で間違えないように注意しましょう(「下回る」は<です)ソースコード
N, X = map(int, input().split())
A = list(map(int, input().split()))
print(sum(1 for a in A if a < X))
この解説は claude4.5opus によって生成されました。
posted:
last update: