走一个大整数迷宫
题号:NC274864
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给一个 n\times m 矩阵迷宫, 第 i 行第 j 列的值为 c_{i,j}LH 在迷宫中迷路了,他需要你的帮助。

LH 当前在 (1,1) 的位置,出口在 (n,m),这个迷宫有一个计数器,只有当计数器的值模 (p-1) 的余数为 0 时迷宫出口才会开门(出口没有开门意味着即使在 (n,m) 的位置也不能逃出去)。

LH 每一秒会向迷宫的上下左右四个方向走一步(不可以不走),并且不能走出迷宫的边界,假设 LH(i,j) 走到了 (i',j'),然后计数器将会加上 c_{i',j'}

特别的,计数器初始是 c_{1,1}

c_{i,j}=a_{i,j}\times p^{2^{b_{i,j}}}

现在 LH 问你,他最快需要多久才可以走出迷宫。

输入描述:

第一行输出三个整数 n,m,p(1\le n,m\le 10,2\le p\le 10^4)

接下来输入一个 nm 列的矩阵 a_{i,j}

接下来输入一个 nm 列的矩阵 b_{i,j}

0\le a_i,b_i\le 10^6

输出描述:

输出一个整数,表示满足条件的最短路径长度。

假如不存在一条路径满足条件,输出 -1
示例1

输入

复制
3 3 10
1 2 3
0 1 4
0 0 0
1 0 0
0 0 1
0 1 0

输出

复制
6

备注:

C=\begin{bmatrix}<br /> 100 &20  &30 \\<br />  0& 10 & 400\\<br />  0& 0 &0<br />\end{bmatrix}

第一秒,从 (1,1) 走到 (1,2),计数器的值为 120

第二秒,从 (1,2) 走到 (1,3),计数器的值为 150

第三秒,从 (1,3) 走到 (1,2),计数器的值为 170

第四秒,从 (1,2) 走到 (2,2),计数器的值为 180

第五秒,从 (2,2) 走到 (3,2),计数器的值为 180

第六秒,从 (3,2) 走到 (3,3),计数器的值为 180,是 9 的倍数,逃出迷宫。

img