AtCoder Beginner Contest 265 C問題 Belt Conveyor
問題
提出解答
問題の概要
行 マスからなるマス目において, 行目, 列目のマスをマス と呼ぶことにする. マス には文字 が書かれている.
あなたは最初マス にある. 以下の行動を移動できなくなるまで行う.
- マス にいるとする.
- かつ ならば, マス に移動する.
- かつ ならば, マス に移動する.
- かつ ならば, マス に移動する.
- かつ ならば, マス に移動する.
最終的にどのマスにとどまることになるか? ただし, 無限に移動する場合はその旨を報告すること.
制約
- は のいずれか.
解法
実際にシミュレーションすればよい. しかし, これだと無限に移動する場合を検出できない. そこで, どうしたら無限の移動を検出できるかを考える.
- 無限に移動する場合, 最初にいるマス とその後の 回の移動後にいるマスの計 個のマスについて, 鳩ノ巣原理から同じマスが存在する. よって, 無限に移動する場合はあるマスを2回以上通ることになる.
- あるマスを2回以上通ることになる場合, 回目の移動後のマスと の移動後のマスが同じだった場合, 回目の移動からは周期 での移動になる. これにより, 無限に移動する.
よって, 無限に移動するための必要十分条件はあるマスを2回以上通ることである. よって, シミュレーションの途中で過去に通ったマスを再び通ることになった場合, その瞬間に無限に移動とすればよい.