考えて競プロする

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

ABC134-B - Golden Apple を解く

ABC134-B - Golden Apple

 

N 本の木があり、1 から N まで番号が振られている

これらの木に対し監視員を配置する

 

1 人の 監視員は番号 i の木のに配置させたとき

番号 i - D 以上 i + D 以下のすべての木を監視することができる

全ての木を監視するためには最低何人の監視員が必要かを求める

 

一人の監視員は番号 i - D 以上 i + D 以下の木を監視できる

つまり、i + D - ( i - D ) + 1 = ( 2D + 1 ) 本の木を監視することができる

 

1人 ( 2D + 1 ) 本の木を監視できるということは

N 本の木を監視するには N / ( 2D + 1 ) 人の監視員が必要であるということになる

このとき、答えが小数になる場合は切り上げる必要があることに注意する

 

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

 

提出したコード

# 入力
N,D=map(int,input().split())

# 出力
print(-(-N//(2*D+1)))

 

上記では、割る数を負の数にすることで

商を切り上げることができることを利用している

 

>>> 8//3
2

>>> -8//3
-3

>>> -(-8//3)
3

 

提出結果はACでした