AtCoder Beginner Contest 146 / Python
2回目の参加。
パソコン壊れ事件が発生している真っ只中だったので集中力を欠いていた、
と言い訳・・・したい。
結果
2問しか解けなかった。
前回3問だったのでレベルダウンしているが、レーティングには関係なかったみたい。
それにしてもショボいレーティング・・・。
問題と解答と勉強
提出したコード
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)
とてもダサいと思いはしたが、
考える時間が勿体なかったのでこのまま提出した。
参考
dic = {'SUN':7,'MON':6,'TUE':5,'WED':4,'THU':3,'FRI':2,'SAT':1} S = input() print(dic[S])
辞書を使えば良かったのか。むむ。
提出したコード
a = list("ABCDEFGHIJKLMNOPQRSTUVWXYZ") N = int(input()) S = input() for i in S: b = a.index(i) + N if b <= 25: print(a[b], end="") else: print(a[b-26], end="")
これはこんな感じで良いかと。
ここまでで約40分経過、残り1時間。
atcoder.jp
時間切れまでに正解が出せなかった、
順番に考えていったら遅いと思ったまでは良いけれど、
そこから数学で解こうとしてしまったのが失敗だった。
二分探索
順番に考えていけば答えは出るけれど、それじゃ遅いときは、とにかく二分探索。
参考
A, B, X = map(int, input().split()) def price(N): return A * N + B * len(str(N)) if price(10**9) < X: print(10**9) else: left = 0 right = 10**9 while left < right - 1: mid = (right + left) // 2 m_price = price(mid) if m_price == X: left = mid break elif m_price > X: right = mid else: left = mid print(left)
A=10、B=7、X=100、売られている数が15までのときを考える。
m_price = 10 × 7 + 7 × 1 = 77 < 100 小
m_price = 10 × 11 + 7 × 2 = 124 > 100 大
m_price = 10 × 9 + 7 × 1 = 97 < 100 小
m_price = 10 × 10 + 7 × 2 = 114 > 100 大
どうも二分探索のコードがスッと書けない。
次に二分探索を出されたら解ききるぞ!
atcoder.jp
Dは今回問題を見ることすら出来なかった。
幅優先探索はまだ全く勉強出来ていないのでパス。
E問題、F問題はパスパスのパス
まだその時期じゃない。