AtCoder Beginner Contest 271 F問題 XOR on Grid Path
問題
提出解答
問題の概要
行 列のマス目があり, 上から 行目, 左から 列目をマス と呼ぶことにする. マス には非負整数 が書かれている.
マス から右か下のマスに移動することを繰り返すことによってマス へ移動する方法のうち, 通ったマスに書かれている非負整数の排他的論理和が となるのは何通りか?
制約
解法
マス から右か下のマスに移動することを繰り返すことによってマス へ移動する方法とは, 右のマスへの移動 回, 下のマスへの移動 回の計 回である.
ここで, 前半 回の移動について考える. このとき, 前半の 回の移動については右, 下の移動がそれぞれ 回だけなので回数の各移動の制限回数も発生せず, 全部で 通りである. ここで, を次のように設定する.
- 前半 回の移動のうち, 右へ移動したのが 回であり, (通ったマス 共に含む) に書かれた整数の排他的論理和が であるような経路の数.
この については前半の移動の場合の数が 通りであったから, 愚直な全探索を利用し, 辞書のリストで管理することによって求められる. 後半についても を同様に
- 後半 回の移動のうち, 右へ移動したのが 回であり, (通ったマス 共に含む) に書かれた整数の排他的論理和が であるような経路の数.
ここで, マス からマス への移動の方法で, マス を経由することと, 前半の移動で 回右に移動をすることが同値である. また, マス を経由するような は任意のマス からマス への移動の方法においてただ一つ存在する.
よって, 前半の移動における右への移動回数 で交わり無く重複無く分割できる. の決め方において, を2回計上していることに注意すると, 求めるべきは
となる.
計算量について, を 時間, を 時間で求められるので, 合計して 時間で求められた.