公式

A - 合格ライン / Passing Score 解説 by admin

GPT 5.2 High

概要

各生徒の得点 \(A_i\) を見て、合格ライン \(X\) 未満の人数を数えて出力する問題です。

考察

求めたいのは「\(A_i < X\) を満たす生徒が何人いるか」だけなので、各得点を1回ずつ確認して条件に当てはまればカウントすれば十分です。

例えば \(X=60\), 得点が \([55, 60, 70, 10]\) なら、\(60\) 未満は \(55\)\(10\) の2人なので答えは \(2\) です。

制約は \(N \le 2 \times 10^5\) と大きいですが、全員を1回ずつ見るだけなら \(O(N)\) で間に合います。逆に、並べ替え(ソート)してから数える方法も可能ですが、\(O(N \log N)\) と不要に重く、問題の本質(条件判定の個数を数える)から外れます。単純に「比較して数える」が最短です。

アルゴリズム

  1. 入力から \(N, X\) と配列 \(A\) を受け取る。
  2. カウンタ ans\(0\) に初期化する。
  3. \(a \in A\) について、もし \(a < X\) なら ans\(1\) 増やす。
  4. ans を出力する。

提示コードでは、sum(1 for a in A if a < X) により「条件を満たす要素の個数」を一度に計算しています。

計算量

  • 時間計算量: \(O(N)\)(各得点を1回ずつ比較するだけ)
  • 空間計算量: \(O(N)\)(得点列 \(A\) を保持するため)

実装のポイント

  • 入力が最大 \(2 \times 10^5\) 個あるので、Pythonでは sys.stdin.read() を使ってまとめて読み込むと高速で安全です。

  • 判定条件は「合格ライン 未満」なので、比較は \(a < X\)\(a \le X\) ではない)に注意します。

    ソースコード

import sys

def main():
    data = sys.stdin.read().strip().split()
    if not data:
        return
    N = int(data[0])
    X = int(data[1])
    A = list(map(int, data[2:2+N]))
    ans = sum(1 for a in A if a < X)
    print(ans)

if __name__ == "__main__":
    main()

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

投稿日時:
最終更新: