AtCoder Beginner Contest 255 C問題 ±1 Operation 1
問題
提出解答
問題の概要
初項 , 公差 , 項数 の等差数列を とする.
最初, 整数 が与えられる. が の要素であるようにするために, 以下の操作は最低でも何回 ( 回以上) しなければならないか?
- 次のうちどちらかを選び実行する.
- に 加算する.
- から 減算する.
制約
解法
の情報として必要なのは にどのような整数が存在するかなので, 必要ならば としても問題ない. なお, のときは以下のようにして とすることができる.
ここで, できる操作は または しかないので, 最小回数を達成させるためには, に最も近い の要素に を目指さなければならない.
今, なので, は単調増加である. よって, の初項と末項をそれぞれ としたとき,
- のとき, 目指すべきは となるので, 答えは である.
- のとき, 目指すべきは となるので, 答えは である.
- のとき, に存在する 以下の最大の要素を , 以上の最小の要素を としたとき, 目指すべきは または なので, 答えは である.
最後に, の求め方を述べる. 今, なので, である. このとき, を で割った余りを としたとき,
である.
補足
なお, と の項を全て同じだけスライドさせても結果は変わらないということに注目すると, 最初に と の項を だけスライドさせると, 及び, となるので, となり, 実装がやや楽になる.