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