D - Long Trail 解説
by
sounansya
まず、trail の条件を言い換えます。完全グラフの各辺をグリッドに見立てます。具体的には、頂点 \(i\) と頂点 \(j\) \((i < j)\) を結ぶ辺をグリッドのマス \((i,j)\) であると考えます。すると、trail であるという条件はグリッド内の移動であって左右への移動と上下への移動を交互に繰り返すような移動であると言い換えることができます。
例えば \(N=5\) では辺は以下のグリッドで表すことができます:
さらに、\(|v_i-v_{i+2}|=1\) という条件は各移動は上下左右に隣接するマスへの移動という条件に言い換えられます。以上を踏まえると、問題は以下のように置き換えられます:
画像のような三角形状のグリッド内で左右の隣接マスへの移動と上下の隣接マスへの移動を交互に繰り返す移動を考える。ただし、同じマスを \(2\) 回以上通ってはいけない。\(\displaystyle \frac{(N-2)^2}2-1\) 回以上移動できるような経路を \(1\) つ求めよ。
以降は \((1,2)\) から移動を始め左右への移動と上下への移動を繰り返し、条件を満たすような移動を表す LRUD 文字列を求めることを考えます。
1. \(N\le 5\) のとき
RD を \(N-2\) 回繰り返すと良いです。この操作列では \((1,2)\) から \((N-1,N)\) まで移動します。
2. \(N= 6\) のとき
RDRURDRDLDRD と移動すれば良いです。この操作列では \((1,2)\) から \((N-1,N)\) まで移動します。
3. \(N\) が偶数のとき
まず左上 \((N-5)\times (N-5)\) マスで \((1,2)\) から \((N-5,N-4)\) まで移動する経路を見つけます。これは \(N\) を \(N-4\) に置き換えた問題として表されます。その後、
- \(N-3,N-2\) 列を用いて蛇腹に上まで上がる
- \(N-1,N\) 列を用いて蛇腹に下まで下る
操作を繰り返すことで \((N-1,N)\) まで移動することができます。
4. \(N\) が奇数のとき
以下のように移動すれば良いです:
RDを繰り返すことで \((N-3,N-1)\) まで移動する。- \(N-1,N\) 列を用いて蛇腹に上まで上がり \((2,N-1)\) まで移動する。
- \(1,2\) 行を用いて蛇腹に左まで移動し \((2,5)\) まで移動する。
- \((3,6)\) に移動する。
- \(3\) 行から \(N-5\) 列まで、\(5\) 列から \(N-2\) 列までを考えるとこれは \(N\) が \(N-6\) の場合に帰着できるので、さらに再帰的に問題を解く。
以上を解くことで条件を満たす LRUD 文字列を求めることができます。そこから簡単に条件を満たす trail を構成することができます。
以上を適切に実装することでこの問題に正答することができます。
投稿日時:
最終更新:
