Moving Floors and a Switch

2 secs 1024 MB
setsuna's icon setsuna

スライムの配置は2HW2^{HW}パターンだけあり、動く床の状態は A, B の2パターンだけあります。
そのため、鳩の巣原理より 2×2HW2 \times 2^{HW} 秒後までに、必ず配置パターンの変化にループが生じます。
よって、ループが生じるまでスライムの移動をシミュレーションすれば良いです。
ループに入るまでに toffsett_{\mathrm{offset}} 秒、ループを 11 周するのに tloopt_{\mathrm{loop}} 秒だけかかるとすると、 tt 秒後のスライムの配置は、

  • t<toffsett < t_{\mathrm{offset}} なら toffsett_{\mathrm{offset}} 秒後のシミュレーション結果
  • ttoffsett \geq t_{\mathrm{offset}} なら (ttoffset)(t - t_{\mathrm{offset}})tloopt_{\mathrm{loop}} で割った余りを trt_r として、trt_r 秒後のシミュレーション結果

となります。

なお、スライムは動く床に従って規則的に移動するため、実際に取り得る配置パターン数 PP2×2HW2 \times 2^{HW} に比べて非常に小さくなります。

11 秒毎のスライムの移動は、動く床の数 HWHW に比例した時間でシミュレーションできるので、計算量は全体で O(HWP)O(HWP) です。

想定解(Python3)