考えて競プロする

プログラミングコンテストの問題をどう考えて解いたかを記録していくブログです。使用言語はPython3

ABC076-B - Addition and Multiplication を解く

ABC076-B - Addition and Multiplication

 

初期値 1 に対して N回、「2倍する」か「Kを足す」かを行ったときに

考えうる最小の値を求める問題

 

常に小さくなるような選択を続ければ、最終的な値も最も小さくなるはず

よってN回ループを回して、1回毎に「どちらを選んだ方が小さくなるか」を

確認していく方法で解いてみる

 

以上を踏まえて書いたコードを以下に示す

 

提出したコード

# 入力
N=int(input())
K=int(input())

# 初期値
a=1

for i in range(N):
  a=min(2*a,a+K)

# 出力
print(a)

 

提出結果はACでした

 

>常に小さくなるような選択を続ければ、最終的な値も最も小さくなるはず

 

上記にてこのように書いたが

これについては、解説PDFでは数式による証明が行われている

興味のある方は読んでみてください