#433. 平方取模迷宫 广州市数学与科学联赛(信息学)D2T1
平方取模迷宫 广州市数学与科学联赛(信息学)D2T1
题目描述
平方取模迷宫
在一个 m 行 n 列的迷宫中,每个格子都有一个整数。你从起点(qx,qy) 出发,初始能量值为起点的格子值。每次你可以向上、下、左、右四个方向移动一格,但不能走出迷宫,也不能重复经过同一个格子。
每当你移动到一个新格子时,你的能量值会按照以下规则更新:
新能量值 = ( 当前能量值 + 新格子的值 )^2 mod q
你的目标是到达终点 (zx,zy),并且到达时能量值恰好等于 w。求最少需要移动多少步。
如果无法在 16 步以内(包含 16 步) 到达终点并满足条件,则输出 -1。
输入格式
第二行两个整数 m 和 n,表示迷宫有 m 行 n 列。
接下来 m 行,每行 n 个整数,第 i 行第 j 个数表示格子 (i, j) 的数值。
整个程序只读入一次迷宫。
接下来 T 行,每行六个整数 qx, qy, zx, zy, q, w,分别表示:
起点的行、列 qx, qy
终点的行、列 zx, zy
取模参数 q
目标和 w
(行列均从 1 开始编号)
输出格式
对于每组测试数据,输出一个整数,表示最少步数。如果无法在 16 步内到达终点并满足条件,输出 -1。
每组输出占一行。
3
3 3
1 2 3
4 5 6
7 8 9
1 1 1 1
10 5
1 1 1 2
100 4
1 1 3 3
1000 81
-1
3
4
1
3 3
1 2 3
4 5 6
7 8 9
1 1 3 3
1000 604
6
数据范围与约定
数据范围 1≤T≤10 1≤n≤m≤900 1≤qx,zx≤m, 1≤qy,zy≤n 1≤q≤10 0≤w<q 起点不参与能量计算,初始能量直接为起点的格子值。
每次移动后,能量值更新为 (当前能量 + 新格子值)^2 % q。
不能重复经过同一个格子。
如果 16 步内无法到达终点或到达时能量值不等于 w,输出 -1。