備忘録代わりに精進記録を載せていくつもりです。提出コードこういう系の問題は思いつかなければとにかく自作のケースでもテストケースでもいいので実験をしてみるのが一番かなと思っています。左から2番目以外の縦線は、あみだくじをどんどん縦につなげていくことで1→4→3→5→1→4→...とループをしていることがわかります。上で、3,4,5からスタートした場合も、上と同じような順番でループをします。一方で、左から2番目のみ、2→2→2→...とずっとその場で留まりつづけます。ループはあみだくじの作り方によって、いける場所が決まっているようです。いうことで、まずはループを洗い出してしまいます。縦につなげない、1個だけのあみだくじについて、始点をiとしたときのゴール地点を、全てのiについて求める。これは、まず配列を用意して、その添え字を配列の中身にします。入力を順番に辿っていってその番号を交換していくと、入力完了後には「ゴールをiとしたときの始点の位置」がそれぞれの配列に格納されます。これをまたひっくりかえせば求めることができます。求めたあみだくじについて、ループがどうなっているかを調べる動的配列を十分な数だけ用意します。最初にいた場所に戻ってくるまで、あみだくじをたどればよいです。調べ終わっているループを再び調べることが無いようにすれば、O(N)で求めることができます。いうことで、ループを調べ終わりました。あとは答えの出力ですが、これまたいちいちたどっているとキリがありません。余りを活用しましょう。1ループあたりの数は、動的配列の大きさになっています。Dをその大きさで割ったあまりだけ移動した場所をみれば、それが答えになっています。あとはこれをすべての点についてみていけば、答えとなります。実装は、AtCoderにしては重めかなという印象です。(1)注目記事はてなブログをはじめよう!emtubasaさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。