AtCoder Beginner Contest 146
はい。
https://atcoder.jp/contests/abc146
oooxx- 909(+14)。C問題まではそこそこスムーズでした。F問題はチャンスでしたね、という感じです。
A - Can't Wait for Holiday
PyPy3
w=['MON','TUE','WED','THU','FRI','SAT','SUN'] s=input() ans=abs(w.index(s)-w.index('SUN')) print(ans if ans else 7)
後ろにSUNを持って行ってindexの差分とSUNは例外かなと思いました。解説見たらif7分岐でした。
これ差分見る必要なくて土曜日、金曜日〜で逆順で配列に入れておけば ['','SAT','FRI','THU','WED','TUE','MON','SUN']
ソレだけで解決出来ますね。
B - ROT N
PyPy3
n=int(input()) s=list(input()) for i in range(len(s)): s[i]=chr((ord(s[i])-65+n)%26+65) print("".join(s))
ord()で文字をずらして%26で剰余を取ってAの方に戻るようにしたりしてchr()でまた文字に。
C - Buy an Integer
PyPy3
a,b,x=map(int,input().split()) ans=[0,10**9+1] for h in range(30): i=sum(ans)//2 p=(a*i)+(b*(len(str(i)))) if p>x: ans[1]=i elif p<=x: ans[0]=i print(ans[0])
0と1000000001で2分探索するのに最悪必要な回数が30回でしょうか。コンテスト中は考えずに50回にしましたけど。
F - Sugoroku
PyPy3
n,m=map(int,input().split()) s=input() ans=[] w=n while w: x=0 for i in range(1,m+1): if w-i>=0 and s[w-i]=='0': x=i if x==0: print(-1) exit() else: ans.append(x) w-=x print(*ans[::-1])
ゴールから見て移動出来る最大マス移動する。リストにappend()で追加しているとゴールからの移動方法になっているので出力時は逆順で出力します。ゴールから移動出来る最大マスの移動方法が最小手、最小辞書順になるのは都合よく自然なに思い込めますが証明は出来ません。