を操作していく中で、の先頭の数と同じ数が現れたとき、またその時に限ってすべての数が消えることに注目する。
数列を例にとって考える。の先頭がである場合、である場合、…の通りについて、を右にひとつつなげた時に、数が全部消えて次に始まる位置を考える:
- 3 2 4 3- 4 1 | 3 2 43 4 1
- X 2 4 3 4 1 | 3 24 3 4 1
- X X 4 3 41 | 3 2 4 3 4 1
- X X X 3 4 1 | 32 4 3 4 1
- X X X X 4 1 | 3 2 43 4 1
- X X X X X 1 | 3 2 4 3 4 1
つまり、をひとつ追加すると先頭の位置は
と変化していることになる。ここで位置が登場しているが、つまり、先頭が存在しない場合も扱う必要があった。すなわち
- X X X X X X | 3 2 4 3 4 1
も追加して
が完全な対応である。この写像を回合成すれば、そこからはシミュレーションで間に合う。合成にはダブリングが使える。
開始位置を通りではなくて通り考える必要がある、という部分を明確にできなくてコンテスト中には書けなかった。
あと、写像を作る部分をで実装するのに時間がかかった。こういうのは問題数をこなすしかなさそう。
