Help us understand the problem. What is going on with this article?

ABC146 感想

More than 1 year has passed since last update.

AtCoder Beginner Contest 146 に参加しました

普段はコンテストに参加→復習で終わってしまいますが、コンテスト中の考察を記録に残したいと思い、記事を書くことにしました。(いつまで続くかは不明)

問題A - Can't Wait for Holiday

愚直に実装しました。

A.py
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") を加えることで大文字のアルファベットのアスキーコードに戻します。
これを各文字に対して行うことで答えが求まりました。

B.py
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分を掛けてしまったのは反省。

C.py
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

全くダメでした。
グラフ問題は見た瞬間に拒否反応が出てしまうので、どこかでしっかり勉強したいと思いつつ中々手を付けられていません...

何か良い学習教材ありませんかね??

まとめ

早く緑になりたい!

micasa
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away