茶色コーダーを目指して、ABC220に、コンテスト2回目の挑戦です。
A, B, C=map(int, input().split())
Flag=False #倍数が見つかるかどうかのフラグ
for i in range(1001):
if A<=C*i<=B:
print(C*i)
Flag=True
break
else:
pass
if Flag==False:
print('-1')
else:
pass
A問題にしては、記述量が多かった気がする。
K=int(input())
#K進法表記のA, B
A, B=map(int, input().split())
# print(K, A, B)
# K進法から、10進法への変換
# int関数の2つ目の引数に整数を指定すると、基数を指定できる。
# print(int(str(A), K))
# print(int(str(B), K))
A_K_10=int(str(A), K)
B_K_10=int(str(B), K)
print(A_K_10*B_K_10)
B問題は、K進法から、10進法への変換の問題。
int()の2つ目の引数に基数を指定すれば、10進数に戻せる。
本当は、int()関数じゃなくて、自分で導出することを意図した問題な気はする。本などで別途アルゴリズム勉強するので、今回は勘弁勘弁。
N=int(input())
A_list=list(map(int, input().split()))
X=int(input())
#繰り返し単位Aの合計を求めておく
A_list_sum=sum(A_list)
#求めたい答えは、XをAの合計で割った商*Nと足りない分の項目数なので、
#整数除算で商を求める。
quotient_X=X//A_list_sum #商: quotient
#余り
mod_X=X % A_list_sum
k=0 #項目数のカウンター。初期化
sum_k=0 #kまでの合計。 初期化
#余りを、越えるまで、項目数を数えていく。
for i in range(N):
sum_k+=A_list[i] #i番目を足していく
k+=1 #項目のカウント
if mod_X<sum_k:
break
else:
pass
print(quotient_X*N+k)
肝心のC問題。今回は、前回に比べると、だいぶ簡単だった。
ポイントは、まずあらかじめXをA_listの合計で割って商を出しておいて、その余りについて、超えるまで、項目数を数えること。
ここまでで、40分ほど。
時間が1時間ほど余ったので、欲をかいてD問題に突入してみた。
問題の意味は理解でき、操作F, Gは実装できたが、なぜか途中のエラーが取り除けず、タイムアップ。
Dについては、他の人の回答見て勉強させてもらおう。bit全探索とか使いそうやなーと思ったけどどうなんだろうか。
今回も、C問題までACすることができてよかった。
反省としては、B問題で、int()を使ってしまったので、基本のn進数の変換については、勉強して自分で実装できるようにしたいと思う。
下記の本で勉強していく予定。
Pythonではじめるアルゴリズム入門 (翔泳社)
来週も頑張りましょう。お疲れさまでした。