1
0

More than 3 years have passed since last update.

PythonでABC151のA~Cを解く

Posted at

はじめに

レートが少しあがりました。今回は、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できなかったので、これからは計算量を意識したように書けるようになりたい
学校のテストがやばい

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0