LoginSignup
0
0

More than 3 years have passed since last update.

ABC146 感想

Last updated at Posted at 2019-11-26

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

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

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

まとめ

早く緑になりたい!

0
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
0
0