Port 53

明日のための技術メモ

AtCoder ABC151

AtCoder ABC151解いた分だけまとめ。
今回はAB2完、Cもいけそうだったけどパターンの見落としでアウト。
5回くらいWAになったので撤退しました。

目次

A. Next Alphabet

問題文 f:id:saturn-glave:20200119155833p:plain

次の文字を出力してください、ということでASCII変換を使う。
入力をASCIIコードに変換して、次の文字のASCIIコードを出す。
出力する時に文字に直せば簡単に求まる。

ACしたコード

#coding:utf-8
c = input()
ans = ord(c) + 1
print(chr(ans))

B. Achieve the Goal

問題文 f:id:saturn-glave:20200119160321p:plain

平均点、というより合計点で考えていく。
平均点×テストの回数で最低の目標の合計点を求め、それと今までの回の合計点を比較する。
あとは場合分けで、普通に答えが出る場合と、以下の2パターンで場合分けする。

  • すでに目標の平均点を上回っている時
  • 次のテストで満点を上回っても無理な場合

ACしたコード

#coding:utf-8
n, k, m = map(int, input().split())
a = list(map(int, input().split()))
border = m * n
total = sum(a)
goal = border - total

#すでに目標の平均点を上回っている場合
if goal < 0:
    print(0)
#次のテストの満点を上回ってでも無理な場合
elif goal > k:
    print(-1)
else:
    print(goal)

C. Welcome to AtCoder

問題文 f:id:saturn-glave:20200119161404p:plain

ここから解説AC。言われた仕様の通りちゃんと実装できるか問題。
結構良い問題だなーと思ったのと、知らなかったルールがあった笑
ペナルティってWAで終わった場合つかないのね...

実装において必要な情報は、

  • 各問題についてACを出したか確認しておくこと
  • 各問題のWAの数を数えておくこと
  • ペナルティとなるWAの数は、その問題でACが出たら加算する
  • ACした後にWAやACをしても加算されない

ACしたコード

#coding:utf-8
n, m = map(int, input().split())
ac = [0] * n
wa = [0] * n
pena = 0

for i in range(m):
    p, s = map(str, input().split())

    if ac[int(p)-1]:
        #すでに正解していれば次の入力へ
        continue
    if s == 'AC':
        ac[int(p)-1] = 1
        #ACが出てからそれまでその問題で出たWAの回数をペナとする
        pena += wa[int(p)-1]
    elif s == 'WA':
        wa[int(p)-1] += 1

print(sum(ac), pena)