AtCoder Beginner Contest 146 / Python


f:id:penyooo:20191128033629p:plain


  • 初学者です。( 2019 / 9 ~ 現在3ヵ月目 )
  • AtCoder の問題に Python で取り組んでいます。
  • ABC で4問目(茶か緑)まで解けることを目標にしています。

完全に独学なのでコードは酷いと思います。

AtCoder やってる方、お気軽にコメントください。



2回目の参加。

パソコン壊れ事件が発生している真っ只中だったので集中力を欠いていた、
と言い訳・・・したい。



結果


f:id:penyooo:20191128034021p:plain

2問しか解けなかった。

前回3問だったのでレベルダウンしているが、レーティングには関係なかったみたい。

それにしてもショボいレーティング・・・。





問題と解答と勉強


atcoder.jp

提出したコード
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])


辞書を使えば良かったのか。むむ。









atcoder.jp

提出したコード
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までのときを考える。

f:id:penyooo:20191128065056p:plain

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は今回問題を見ることすら出来なかった。

幅優先探索


幅優先探索はまだ全く勉強出来ていないのでパス。








atcoder.jp

atcoder.jp



E問題、F問題はパスパスのパス
まだその時期じゃない。