問題を言い換える(クイズ大会)

問題

$ N $ 人の生徒がクイズ大会に参加しました。

この大会では $ M $ 問が出題され、$ i $ 問目では$ A_i $ 番目の生徒を除く全員が正解しました。

各生徒の最終的な正解数を求めて下さい。

解き方・ソースコード

この問題は、正解数を求めるよりも不正解数をカウントして、最後に質問数から不正解数を引いた方が簡単に解けます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#--------- 入力例1 ---------
N = 4 # 人数
M = 7 # 質問数
A = [2, 3, 3, 1, 4, 1, 1] # 不正解となる生徒の番号
#---------------------------
# 配列の準備(生徒ごとの不正解数)
Incorrect = [0] * (N + 1)

# 不正解数を求める
for i in range(M):
Incorrect[A[i]] += 1

# 答えを出力
for i in range(1, N + 1):
print('生徒{}の正解数 {}'.format(i, M - Incorrect[i]))

[実行結果(入力例1)]

生徒1の正解数 4

生徒2の正解数 6

生徒3の正解数 5

生徒4の正解数 6

各生徒の最終的な正解数をカウントすることができました。