AtCoderのコンテストに参加した高橋君の正答数とペナルティ数を答える問題です。
コンテストは全部で N 問、M 回の提出を行い、提出した問題と結果(「AC」または「WA」)が分かっています。
提出
n, m= map(int, input().split())
ps = [list(map(str,input().split())) for _ in range(m)]
str_l = ["WA"]*n
int_l = [0]*n
num = 0
ac = 0
for pp, s in ps:
p = int(pp)-1
if s == "AC":
str_l[p] = "AC"
else:
if str_l[p] != "AC":
int_l[p] += 1
for i in range(n):
if str_l[i] == "AC":
num += int_l[i]
ac += 1
print(ac,num)
N,M は整数として受け取っておきます。
提出した問題 p と結果 s を内包表記を使用して受け取り、2次元リストを生成します。
それから、すべてが「WA」のリストと「0」のリストを生成します。
先ほどの2次元リスト ps を用いて、どの問題が「AC」したのか、まだ「AC」していない問題を何回「WA」したのかを最初のfor文で調べていきます。
2つ目のfor文で、「AC」を出した問題の回数(ac)と「AC」を出す前のペナルティ回数(num)を計算して結果を出力します。
解説が分かりやすくて助かります。
ありがとうございます。