Official

C - Calculator Editorial by maroonrk_admin


操作 43434 \rightarrow 3 \rightarrow 4 \rightarrow 3 \rightarrow \cdots と続けることを考えます. ここで,操作を合計 SS 回行ったとします. 便利のため,SS は偶数であるとします.

任意の ii (0iS0 \leq i \leq S) について,ii 回目の操作後に操作 11 か操作 22 を行うことを考えます. すると,以下のことがわかります.

  • ii が偶数の場合:操作 1111 回行うたびに,最終的な xx の値が fib(Si)fib(S-i) 増える.
  • ii が奇数の場合:操作 2211 回行うたびに,最終的な xx の値が fib(Si)fib(S-i) 増える.

ただしここで,fib(n)fib(n) はフィボナッチ数(fib(0)=1,fib(1)=1,fib(n)=fib(n1)+fib(n2)fib(0)=1,fib(1)=1,fib(n)=fib(n-1)+fib(n-2) for 2n2 \leq n)を表します.

ii について,高々 11 回だけ操作 11 or 22 を行うことを考えてみます. この場合,SS の値としては,fib(S)1018fib(S) \leq 10^{18} となる最大の SS を選べばよいです.それ以上大きい SS は無駄であるためです. 実際に計算すると S=86S=86 を選べばよいとわかります.

あとは,fib(Si)fib(S-i) の和で NN を作る問題を解けばよいです. これは,ii の小さい方から,操作が行えるなら行う貪欲をすればよいです. この時,iii+1i+1 両方で操作することはありません. なぜなら,その場合は i1i-1 で操作すればいいからです. よって,操作 11 or 22 の回数は S/2+1=44S/2+1=44 で抑えられます. (なお,実際には最大で 4343 回です)

よって,全体の操作回数が 86+44=13086+44=130 回で抑えられ,この問題が解けます.

posted:
last update:



2025-04-08 (Tue)
17:36:16 +00:00