AtCoder Beginner Contest 272 D問題 Root M Leaper
B# 問題 atcoder.jp
提出解答
問題の概要
行 列のマス目がある. 上から 行目, 左から 列目のマスのことを と書く.
最初, マス のみに駒がある.
各 を満たす整数の組 について, 以下の問に答えよ.
- 次の操作を 回以上行い, 駒をマス にある状態にすることは可能か? 可能ならばその操作回数の最小値を求めよ.
- マス に駒があるとする. を満たす整数の組 を選び, 駒をマス に移動させる.
制約
解法
駒をマス からマス に移動させることが可能かどうかは各座標の差の組 のみに依存する.
そこで, 整数の組の部分集合 を
と定義する. このとき, 整数 について以下の事がわかる.
- となる整数 が存在するならば, である.
- 各整数 において, となる整数 は高々2個である.
よって, であることがわかった.
あとは幅優先探索を利用してマス からの最小操作回数を求めれば良い. 計算量はマスの数が で, 各マスについて最大で 個の移動の方法があるので, 時間である.