E - Rookhopper's Tour Editorial
by
Nyaan
勝利する白石の配置がどのような条件を満たすのかを考えます。
まず、同列に 2 個以上の白石は存在しないため、黒石は (a) 縦->横->縦->…->縦->横 または (b) 横->縦->横->…->横->縦 と移動することになります。よって \(M\) は偶数である必要があります。
また、条件を満たす配置において、(a) または (b) のどちらか一方のみの移動が可能であることが証明できます。
(証明) ある配置が (a) と (b) の 2 種類の移動が両方可能と仮定します。移動の性質から次の事実が確認できます。
- (a) の移動で \(i\) 回目に黒石を移動させるマスと (b) の移動で \(M-i\) 回目に黒石を移動させるマスは一致している。
- (a) の移動で \(i\) 回目で取り除く白石 と (b) の移動で \(M+1-i\) 回目で取り除く白石が一致している。
この事実から、\(1 \leq i \lt M\) について「(a) の移動で \(i\) 回目に黒石を移動させるマス」と「(a) の移動で \(i + 1\) 回目に黒石を移動させるマス」は白石をはさんで双方向に移動可能であることが確認できます。つまり、この 2 つのマスは距離 2 である必要があります。よって、全ての移動が距離 2 の移動である必要がありますが、距離 2 の移動のみを用いて移動できる配置は必ず「白石が各行および各列に 1 個までしか配置できない」という性質に反します。よって (a) と (b) の 2 種類の移動が両方可能であることはあり得ません。(証明終わり)
以上の考察から、1 つの配置に (a) と (b) どちらか一方の移動が対応することが分かったので、移動を数え上げればよいことがわかりました。
以下では (a) の移動が可能な配置を考えます。((b) についても同様に考えればよいです)
配置の性質について考察します。例えば 1 回目の移動で下に、 2 回目の移動で右に移動するとすると
- \((x,B)\) の白石を飛び越えて \((x+1,B)\) に着き, その後 \((x+1,y)\) の白石を飛び越えて \((x+1,y+1)\) に着く
という風に動くことになりますが、この時 \(x\) 行目と \(x+1\) 行目に石が置かれていることになります。
他についても同様で、一般に次の関係が成り立ちます。(ここで \(n\) 回目は \(\text{mod }M\) で考える)
- \(n\) を奇数とする。\(n\) 回目と \(n+1\) 回目に取り除かれる白石は置かれる行が隣り合っている。また、黒石が上から来た時は \(n\) 回目の石が \(n+1\) 回目より上の行に、下から来た時は下の行に存在する。\(\cdots(\ast)\)
列に関しても \(n\) を偶数としたときに類似する関係が全て成り立ちます。よって、石の配置は行・列を交互に 2 列ずつ占めていく操作として解釈できます。
このような配置の性質を元に数え上げを行います。
簡単のためにまず始点(および終点)が \((A, B)\) であるという条件が無い場合を考えます。
全ての配置は 2 行・ 2 列ずつを交互に占める操作として表すことができます。また、逆に占める行・列の順番を全て固定すれば、それに対応する始点と白石の配置が一意に定まります。このような一対一対応が取れるので、占める行・列の順番を数える問題に帰着できます。そして、占める行・列の順番の通り数は二項係数の形で表せるので数え上げることが出来ます。
これに加えて始点が \((A,B)\) であるという条件を追加すると、行・列の占め方に次のような条件が加わります。
- \(M-1\) 回目と \(M\) 回目に取り除かれる白石で \(A\) 行目と \(A+1\) 行目、または \(A-1\) 行目と \(A\) 行目を占める (\(M-2\) 回目に取り除かれる白石の位置が \(A\) 行目より上か下かによってどちらの行を占めるかが変わる)
- \(M\) 回目と \(1\) 回目に取り除かれる白石で \(B\) 列目 と \(B+1\) 列目、または \(B-1\) 列目と \(B\) 列目を占める。(\(M-1\) 回目に取り除かれる白石の位置が \(B\) 列目より右か左かによってどちらの列を占めるかが変わる)
これらの条件を満たす行・列の占め方を数える問題になります。これは、「\(M-2\) 回目に取り除かれる白石と \(A\) 行目の上下関係」「\(M-1\) 回目に取り除かれる白石と \(B\) 列目の左右関係」の \(2 \times 2 = 4\) 通りを決め打つと答えは二項係数の和で表せるので、それらを全て足し合わせれば答えを求められます。
以上の内容を適切に実装すればこの問題を \(\mathrm{O}(N)\) で解くことが出来ます。
posted:
last update:
