公式
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\) 人なので、全員を一回見るとしても十分間に合う(時間計算量的にも問題ない)ことがわかります。
アルゴリズム
- 最初に \(N\)(クラス数)と \(K\)(合格ライン)を受け取る。
- 各クラスについて以下の処理を行う:
- そのクラスの生徒数 \(A_i\) と、各生徒の点数 \(B_{i,1}, B_{i,2}, \ldots, B_{i,A_i}\) を受け取る。
- 各点数が \(K\) 以上かどうかを確認し、そうであればカウンターを増やす。
- 最後にカウンターの値を出力する。
計算量
- 時間計算量: \(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 によって生成されました。
投稿日時:
最終更新: