単純な数え上げ。問題ごとにACがでるまでWAのカウントをする。
目次
概要
- 問題は
問ある。
回提出。
- 成功すれば
失敗すれば
となる。
- 1度でも
したらその問題の
の回数は1回。
の回数は問題ごとに
するまでに
した回数である。
- この時、提出したものの
のそれぞれの回数は?
追記:条件にペナルティ数は、高橋君が AC を 1回以上出した各問題において、初めて AC を出すまでに出した WA の数の総和って書いてあった。
解くときに考えた内容
しているかどうかが要なので、問題ごとにTrue, Falseでパターン分け。
- 問題ごとにboolをリストで持つ
問目がまだ
していない状態で
ならインクリメントしていく。
結果的に疑問だったのは、 問目がTrueがでたら、
問目の
の数を足していかないと一部通らなかった。
別に最後に、全部足しても結果変わらないと思うんだけど、どういう例の時に想定と異なることが起きるのかはわからずじまい。
追記: 条件を見落としていた。WAのカウントはACが出ているのが前提なので、ACが出た時点でカウントしなくてはならない。つまり、ACがでていないものはWAがいくらあっても0ってことね。問題はちゃんと読みましょう・・・
コード
n, m = map(int, input().split()) P = [0] * m S = [0] * m for i in range(m): P[i], S[i] = map(str , input().split()) # 問題によってカウントしたい WA = [0] * (n+1) # 全体として何個かがわかればいい AC = [False] * (n+1) wa = 0 for i in range(m): p = int(P[i]) # 一度ACになったらその問題は無視 if AC[p]: continue # ACになっていない問題の処理 else: # ACになったか判定 if S[i] == 'AC': AC[p] = True # ACが通った時のWAのカウントを都度行う必要があるっぽい。違いはわからん # 条件でACが出たものに関してWAのカウントをするってなっていた。(条件落としていた。) wa += WA[p] # ACじゃなかったらWAなので+1していく if AC[p] != True: WA[p] += 1 # 最後に合計使用するとダメな時がある(条件落としてた) # wa = sum(WA)(これだとAC出てないものをカウントしちゃう。条件落としてた。) ac = sum(AC) print(ac, wa)