はじめに
レートが少しあがりました。今回は、A,Bしか解けませんでした。
A問題
考えたこと
入力されたアルファベットをasciiに変換して1を足して、戻してprintすればいい。
前に似たような問題を解いた時は、zが出てきたのでif文を使ったので今回も同じような問題だと思って遅れた。
c = ord((input()))
print(chr(c+1))
B問題
考えたこと
それぞれの教科の合計点数とMの差で分ける。
n, k, m =map(int,input().split())
a = map(int,input().split())
score = 0
for i in a:
score += i
if (score + k) / n < m:
print(-1)
elif (m*n - score) < 0:
print(0)
else:
print(m*n - score)
C問題
考えたこと
時間内に解けませんでした。TLEになってしまった。
ACした問題のWAをカウントしない、WAした問題でもACしていなかったらカウントしないという条件をうまく実装できなかった。
import collections
n, m =map(int,input().split())
p = []
for i in range(m):
p.append(input().split())
del_l = []
for j in range(m):
if p[j][1] == 'AC':
del_l.append(p[j][0])
p[j][0] = 'pass'
p[j][1] = 'pass'
if p[j][1] =='WA' and p[j][0] in del_l:
p[j][0] = 'pass'
p[j][1] = 'pass'
pen = 0
for s in range(m):
if p[s][1] == 'WA' and p[s][0] in del_l:
pen += 1
print(len(collections.Counter(del_l)),pen)
自分の力では、なんでTLEになってるか分からなかったので、ryuki氏に教えてもらった。感謝
TLEしていた理由は、p[j][0] in del_lの$in$で計算量が増えているらしい。
そして、ACしているかはWA or ACなのでboolで書ける。という色々なアドバイスを貰ってACできました。
n, m = map(int,input().split())
a = [input().split() for i in range(m)]
p = [int(i[0]) for i in a]
q = [j[1] for j in a]
ac = 0
wa = 0
wa_c = [0] * n
ac_c = [False] * n
for t in range(m):
if ac_c[p[t]-1]:
continue
if q[t] == 'AC':
ac += 1
ac_c[p[t]-1] = True
wa += wa_c[p[t]-1]
else:
wa_c[p[t]-1] += 1
print(ac,wa)
###まとめ
初めてTLEが原因でACできなかったので、これからは計算量を意識したように書けるようになりたい
学校のテストがやばい