公式
B - 生徒の成績管理 / Student Grade Management 解説
by
B - 生徒の成績管理 / Student Grade Management 解説
by
kyopro_friends
与えられた情報を生徒ごとに分類し、各生徒の平均点を計算すればよいです。「 \(\mathrm{scores}[i]=\) 生徒 \(i\) の得点の配列(リスト)」とするような \(\mathrm{scores}\) を用意するのが簡単です。
実装例 (Python)
N, M, T = map(int, input().split())
scores = [[] for _ in range(N)]
for _ in range(M):
c, s = map(int, input().split())
scores[c-1].append(s)
ans = 0
for i in range(N):
if len(scores[i]) and sum(scores[i]) / len(scores[i]) < T:
ans += 1
print(ans)
なお、平均点を求めるには合計と件数がわかっていれば十分であるため、得点のリストの代わりにこれら 2 つの情報のみを管理することでも解けます。
実装例 (C++)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m, t;
cin >> n >> m >> t;
vector<int>score_sum(n), score_count(n);
for(int i=0; i<m; i++){
int c, s;
cin >> c >> s;
c--;
score_sum[c] += s;
score_count[c] += 1;
}
int ans = 0;
for(int i=0; i<n; i++){
if(score_count[i] > 0 && (double) score_sum[i] / score_count[i] < t){
ans++;
}
}
cout << ans << endl;
}
どちらの方針でも計算量は \(O(N+M)\) となります。
