公式

A - 合格者数の集計 / Counting the Number of Successful Applicants 解説 by admin

Qwen3-Coder-480B

概要

複数のクラスに所属する生徒たちの点数の中から、合格ライン \(K\) 点以上を取った生徒の総数を数える問題です。

考察

この問題は、単純にすべての生徒の点数を確認して、\(K\) 点以上かどうかを調べるだけです。特に難しい条件や制約はありません。

例えば、入力例が以下のような場合を考えてみましょう。

2 70
3 60 80 90
2 50 75
  • クラス1には3人の生徒がいて、点数はそれぞれ 60, 80, 90 点です。
  • クラス2には2人の生徒がいて、点数はそれぞれ 50, 75 点です。
  • 合格ライン \(K = 70\) 点なので、
    • クラス1では 80点、90点 の2人が合格。
    • クラス2では 75点 の1人だけが合格。
  • よって、合計で \(2 + 1 = 3\) 人が合格。

このように、各クラスごとに生徒の点数を一つずつ見て、\(K\) 以上であればカウントを増やすだけで答えが求められます。

また、制約を見ると、生徒の総数は最大で \(10^6\) 人なので、全員を一回見るとしても十分間に合う(時間計算量的にも問題ない)ことがわかります。

アルゴリズム

  1. 最初に \(N\)(クラス数)と \(K\)(合格ライン)を受け取る。
  2. 各クラスについて以下の処理を行う:
    • そのクラスの生徒数 \(A_i\) と、各生徒の点数 \(B_{i,1}, B_{i,2}, \ldots, B_{i,A_i}\) を受け取る。
    • 各点数が \(K\) 以上かどうかを確認し、そうであればカウンターを増やす。
  3. 最後にカウンターの値を出力する。

計算量

  • 時間計算量: \(O(\sum_{i=1}^{N} A_i)\) (=全生徒の人数の和)
  • 空間計算量: \(O(1)\) (入力を除けば定数メモリ)

実装のポイント

  • 各行の入力は map(int, input().split()) などで簡単に整数リストに変換できます。
  • 各クラスの最初の値が生徒数 \(A_i\) であり、その後に点数が続くことに注意しましょう。
  • 合格者のカウント用変数はループ外で初期化しておくこと。
## ソースコード

```python
N, K = map(int, input().split())
count = 0
for _ in range(N):
    data = list(map(int, input().split()))
    A = data[0]
    scores = data[1:]
    for score in scores:
        if score >= K:
            count += 1
print(count)

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

投稿日時:
最終更新: