ABC146(A,B)
A - Can't Wait for Holiday
https://atcoder.jp/contests/abc146/tasks/abc146_a
かかった時間 3分
List=["SUN","MON","TUE","WED","THU","FRI","SAT"] S=str(input()) num=List.index(S) print(7-num)
B - ROT N
https://atcoder.jp/contests/abc146/tasks/abc146_b
かかった時間 20分
List=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] print(len(List)) N=int(input()) S=list(map(str,input())) ans="" for i in S: num=List.index(i) ans+=List[(num+N)%26] print(ans)
Zの次はAに戻らなければならないので配列の要素の数、今回は26で割ると先頭にもどるので、そのindexを使ってリストから取り出しています。
C - Buy an Integer
https://atcoder.jp/contests/abc146/tasks/abc146_c
A,B,X=map(int,input().split()) ans=0 for i in range(10**9): num=A*i+B*len(str(i)) if num>X: break if num>ans: ans=i print(ans)
最初は上記のコードでやっていたんでがタイムアウトしたため、調べて見たところ二分木探索というのを行うらしくやってみました。
A,B,X=map(int,input().split()) left=1 right=10**9 ans=0 while left<=right: mid=(left + right)// 2 #Xより小さい場合に探索範囲を右に変える if A*mid+B*len(str(mid))<=X: ans=mid left=mid+1 #Xより大きい場合に探索範囲を左に変える else: right=mid-1 print(ans)
参考記事
https://codezine.jp/article/detail/12243
今回の問題は全体的に難しかったです。