首页 > 试题广场 >

走一个大整数迷宫

[编程题]走一个大整数迷宫
  • 热度指数:725 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}给定一个 n \times m 的矩阵迷宫,其中第 i 行第 j 列的格子权值为

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

\hspace{15pt}LH 起始位于 (1,1),出口位于 (n,m)。迷宫配有一个计数器,初始值为 c_{1,1}。在任意时刻,若计数器的值满足 \text{counter} \equiv 0 \pmod{(p-1)},且 LH 身处出口 (n,m),大门即刻打开,LH 得以逃离。

\hspace{15pt}每经过 1 秒,LH 必须向上、下、左、右四个方向中的某一方向移动一步(不得停留,也不得走出迷宫)。假设 LH 从 (i,j) 移动到 (i',j'),则计数器会累加 c_{i',j'}

\hspace{15pt}请计算 LH 最快需要多少秒才能逃离;若无论如何都无法逃离,则输出 -1

输入描述:
\hspace{15pt}输入共三部分:
\hspace{23pt}\bullet\,第一行输入三个整数 n,m,p\left(1\leqq n,m\leqq 10;\ 2\leqq p\leqq 10^{4}\right)
\hspace{23pt}\bullet\,接下来 n 行,每行 m 个整数,构成矩阵 a_{i,j}
\hspace{23pt}\bullet\,再接下来 n 行,每行 m 个整数,构成矩阵 b_{i,j},范围均为 0\leqq a_{i,j},b_{i,j}\leqq 10^{6}


输出描述:
\hspace{15pt}输出一个整数,代表最短逃离时间;若无法逃离,输出 -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
头像 丨阿伟丨
发表于 2025-08-29 12:28:36
题目链接 走一个大整数迷宫 题目描述 给定一个 的矩阵迷宫。矩阵中第 行 列的格子的权值为 。 LH 从起点 出发,目标是到达出口 。迷宫配有一个计数器,其初始值为起点 的权值 。 LH 每秒必须从当前格子向上下左右四个相邻方向之一移动一格(不得停留或走出迷宫)。假设 LH 从 移动到 展开全文
头像 牛客754921490号
发表于 2025-12-20 18:20:12
#include <iostream> #include <vector> #include <cmath> #include <deque> using namespace std; // (a+b)%m = (a%m + b%m)%m // (a 展开全文
头像 drawer
发表于 2025-11-29 15:17:52
将set换成unordered_set就过了; 红黑树并没那么高效; 解题过程 还是传统的bfs,只不过每一步多存了个value;然后将visited换为比较value; void solve() { int n, m, p; cin >> n >> m >&g 展开全文
头像 牛客242693846号
发表于 2025-07-28 15:55:30
python3超时用Pypy3运行 from collections import deque n,m,p = map(int,input().split()) A = [list(map(int,input().split())) for _ in range(n)] B = [list(map 展开全文
头像 小胡放轻松
发表于 2025-12-21 01:06:47
#include <iostream> #include <queue> #include <vector> using namespace std; //定义状态结构体 struct state{ int i, j, counter; }; int 展开全文
头像 草海桐
发表于 2025-09-02 22:12:29
package main import ( "fmt" ) type State struct { i, j int r int // 当前计数器 mod (p-1) steps int } func main() { var n, m, p int fm 展开全文
头像 冷艳的西红柿刷牛客
发表于 2025-10-29 10:48:06
#include <iostream> #include <queue> #include <cstring> using namespace std; int n, m ,p; int a[11][11]; int dist[11][11][10005]; i 展开全文
头像 阿彪b
发表于 2025-12-17 10:59:29
#include <bits/stdc++.h> using namespace std; struct dd{ int x; int y; int c; }; int main() { int n,m,p; vector<vector< 展开全文