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)\) のアルゴリズムで十分高速に動作します。特別な工夫は必要ありません。

アルゴリズム

  1. \(N\)(生徒数)と \(X\)(合格ライン)を読み込む
  2. 各生徒の得点 \(A_1, A_2, \ldots, A_N\) を読み込む
  3. 各得点 \(A_i\) について、\(A_i < X\) かどうかを判定する
  4. 条件を満たす生徒の人数をカウントして出力する

具体例

入力例:

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: