#AtCoder Beginner Contest 146 に参加しました
普段はコンテストに参加→復習で終わってしまいますが、コンテスト中の考察を記録に残したいと思い、記事を書くことにしました。(いつまで続くかは不明)
##問題A - Can't Wait for Holiday
愚直に実装しました。
S = input()
if S == "SUN":
print(7)
elif S == "MON":
print(6)
elif S == "TUE":
print(5)
elif S == "WED":
print(4)
elif S == "THU":
print(3)
elif S == "FRI":
print(2)
else:
print(1)
##問題B - ROT N
文字をアスキーコードに変換する方法を知らなかったので、
Google先生に聞いてord()
とchr()
を知りました。
対象の文字を0~25
で表し、N回ずらすためNを加え、26で割った余りを求めます。
最後に ord("A")
を加えることで大文字のアルファベットのアスキーコードに戻します。
これを各文字に対して行うことで答えが求まりました。
N = int(input())
S = input()
new_s = []
for c in S:
new_s.append(chr((ord(c) - ord("A") + N) % 26 + ord("A")))
print("".join(new_s))
##問題C - Buy an Integer
初めにNについて全探索を行いましたが、TLEでした。(そりゃそう)
PyPyなら通るのでは(?)と思いさらにTLEを重ねてしまいました。
途中で「条件を満たす中の最大値」を求めるには二分探索が使えると気づき、
通すことができました。
1つの方法に固執し過ぎて二分探索に至るまでに30分を掛けてしまったのは反省。
a,b,x = map(int, input().split())
left = 0
right = 10**9 + 1
while right > left + 1:
n = (left + right) // 2
if a * n + b * len(str(n)) <= x:
left = n
else:
right = n
print(left)
##問題D - Coloring Edges on Tree
全くダメでした。
グラフ問題は見た瞬間に拒否反応が出てしまうので、どこかでしっかり勉強したいと思いつつ中々手を付けられていません...
何か良い学習教材ありませんかね??
まとめ
早く緑になりたい!