Edit

【pythonでABC151を解説】C - Welcome to AtCoder

問題概要

問題ページ

問題文

高橋君は AtCoder のコンテストに参加しています。

このコンテストでは、 \(N\) 問の問題が出題されます。

高橋君はコンテスト中に \(M\) 回の提出を行いました。

\(i\) 回目の提出は \(p_i\) 番目の問題への提出であり、結果は \(S_i\) (AC または WA) でした。

高橋君の正答数は、AC を \(1\) 回以上出した問題の数です。

高橋君のペナルティ数は、高橋君が AC を \(1\) 回以上出した各問題において、初めて AC を出すまでに出した WA の数の総和です。

高橋君の正答数とペナルティ数を答えてください。

制約

  • \(N\) , \(M\) , \(p_i\) は整数
  • \(1 ≤ N ≤ 10^5\)
  • \(0 ≤ M ≤ 10^5\)
  • \(1 \leq p_i \leq N\)
  • \(S_i\) は ACWA のいずれか

問題の考察

ACコード

import sys
import collections


def solve():
    readline = sys.stdin.buffer.readline
    mod = 10 ** 9 + 7
    n, m = list(map(int, readline().split()))
    ps = [list(map(str, readline().rstrip().decode('utf-8').split())) for _ in range(m)]
    ac = collections.defaultdict(int)
    wa = collections.defaultdict(int)
    for p, s in ps:
        if s == "WA":
            if p not in ac:
                wa[p] += 1
        if s == "AC":
            ac[p] += 1
    wac = 0
    for k, v in wa.items():
        if k in ac:
            wac += v
    print(len(ac), wac)


if __name__ == '__main__':
    solve()

プログラミング

-Edit