Official
C - Calculator Editorial by maroonrk_admin
操作 と続けることを考えます. ここで,操作を合計 回行ったとします. 便利のため, は偶数であるとします.
任意の () について, 回目の操作後に操作 か操作 を行うことを考えます. すると,以下のことがわかります.
- が偶数の場合:操作 を 回行うたびに,最終的な の値が 増える.
- が奇数の場合:操作 を 回行うたびに,最終的な の値が 増える.
ただしここで, はフィボナッチ数( for )を表します.
各 について,高々 回だけ操作 or を行うことを考えてみます. この場合, の値としては, となる最大の を選べばよいです.それ以上大きい は無駄であるためです. 実際に計算すると を選べばよいとわかります.
あとは, の和で を作る問題を解けばよいです. これは, の小さい方から,操作が行えるなら行う貪欲をすればよいです. この時, と 両方で操作することはありません. なぜなら,その場合は で操作すればいいからです. よって,操作 or の回数は で抑えられます. (なお,実際には最大で 回です)
よって,全体の操作回数が 回で抑えられ,この問題が解けます.
posted:
last update: