牛客小白月赛97:D走一个大整数迷宫

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
 

题目描述

给一个 n×mn\times mn×m 矩阵迷宫, 第 iii 行第 jjj 列的值为 ci,jc_{i,j}ci,j​ ,LHLHLH 在迷宫中迷路了,他需要你的帮助。

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

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

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

ci,j=ai,j×p2bi,jc_{i,j}=a_{i,j}\times p^{2^{b_{i,j}}}ci,j​=ai,j​×p2bi,j​。

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

输入描述:

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

接下来输入一个 nnn 行 mmm 列的矩阵 ai,ja_{i,j}ai,j​。

接下来输入一个 nnn 行 mmm 列的矩阵 bi,jb_{i,j}bi,j​。

0≤ai,bi≤1060\le a_i,b_i\le 10^60≤ai​,bi​≤106。

输出描述:

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

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

示例1

输入

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

3 3 10
1 2 3
0 1 4
0 0 0
1 0 0
0 0 1
0 1 0

输出

复制6

6

备注:

C=[1002030010400000]C=\begin{bmatrix}
 100 &20  &30 \\
  0& 10 & 400\\
  0& 0 &0
\end{bmatrix}C=⎣⎡​10000​20100​304000​⎦⎤​。

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

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

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

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

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

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

img

做法

bfs+dp。赛时想不到怎么弄,因为它可以走重复的格子,vis[i][j]不能用了限制循环次数。也没想到Cij的值直接可以化为Aij。我们可以加多一维来表示余数,即dp[i][j][k]表示走到第i行j列且余数为k的最短路。用vis[i][j][k]来限制循环次数,因为之前已经求出最短路了,再次经过该点不可能比之前再短了,所以直接跳过。

代码

#include<bits/stdc++.h>
using namespace std;
int n,m,p;
int a[20][20],b[20][20];
int dp[20][20][10010];
int vis[20][20][10010];
int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
struct ty{
    int x,y,res;  
};
queue<ty> q;
void bfs(){
    memset(dp,sizeof(dp),0x3f);
    q.push({1,1,a[1][1]%p});
    vis[1][1][a[1][1]%p]=1;
    dp[1][1][a[1][1]%p]=0;

    while(!q.empty()){
        ty tmp=q.front();
        q.pop();
        for(int i=0;i<4;i++){
            int x=tmp.x+dx[i];
            int y=tmp.y+dy[i];
            if(x>n||x<=0||y>m||y<=0) continue;
            if(vis[x][y][(tmp.res+a[x][y])%p]) continue;
            dp[x][y][(tmp.res+a[x][y])%p]=dp[tmp.x][tmp.y][tmp.res]+1;
            vis[x][y][(tmp.res+a[x][y])%p]=1;
            q.push({x,y,(tmp.res+a[x][y])%p});
        }
    }

    if(dp[n][m][0]!=0x3f3f3f3f) cout<<dp[n][m][0];
    else cout<<-1;
}
int main(){
    cin>>n>>m;
    scanf("%d",&p);
    p--;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            scanf("%d",&b[i][j]);
        }
    }
    bfs();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/755308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python28-2 机器学习算法之SVM(支持向量机)

SVM&#xff08;支持向量机&#xff09; 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种用于分类和回归分析的监督学习模型&#xff0c;在机器学习领域中被广泛应用。SVM的目标是找到一个最佳的分割超平面&#xff0c;将不同类别的数据分开&…

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言&#xff0c;熟悉重装系统的方法可以帮助他们解决各种问题&#xff0c;从提高系统速度到修复软件故障。然而具体来讲&#xff0c;笔记本重装系统怎么操作呢&#xff1f;接下来&…

基于SpringBoot和PostGIS的某国基地可视化实战

目录 前言 一、Java后台开发设计与实现 1、模型层实现 2、控制层设计 二、WebGIS界面实现 1、列表界面的定义 2、全球基地可视化 三、成果展示 1、全球部署情况 2、亚太地区 3、欧洲基地分布 4、中东的部署 四、总结 前言 在之前的博客中&#xff0c;我们曾经对漂亮…

我在高职教STM32——GPIO入门之按键输入(2)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…

影响LED显示屏质量的关键因素

LED电子显示屏以其环保节能的特点&#xff0c;成为现代显示技术的重要选择。然而&#xff0c;确保显示屏的质量和安全使用&#xff0c;需要考虑多个方面。本文将探讨影响LED电子显示屏质量的关键因素&#xff0c;以及在不同环境下如何预防失火现象。 材质因素 显示屏的质量首先…

排序(冒泡排序、选择排序、插入排序、希尔排序)-->深度剖析(一)

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言 排序是一种基本的数据处理操作&#xff0c;它涉及将一系列项目重新排列&#xff0c;以便按照指定的标准&#xff08;通常是数值大小&#xff09;进行排序。在C语言中&#xff0c;排序算法是用来对元素进行排序的一系…

C语言从入门到进阶(15万字总结)

前言&#xff1a; 《C语言从入门到进阶》这本书可是作者呕心沥血之作&#xff0c;建议零售价1元&#xff0c;当然这里开个玩笑。 本篇博客可是作者之前写的所有C语言笔记博客的集结&#xff0c;本篇博客不止有知识点&#xff0c;还有一部分代码练习。 有人可能会问&#xff…

“ONLYOFFICE 8.1:提升用户体验和编辑功能的全面升级”

引言 官网链接 在当今快节奏的工作环境中&#xff0c;高效地处理文档是每个职场人士必备的技能。ONLYOFFICE 桌面编辑器凭借其强大的功能和用户友好的界面&#xff0c;成为了提升文档处理效率的得力助手。本文将介绍 ONLYOFFICE 桌面编辑器的核心特性&#xff0c;并展示如何通…

PAI3D: Painting Adaptive Instance-Prior for 3D Object Detection论文讲解

PAI3D: Painting Adaptive Instance-Prior for 3D Object Detection论文讲解 1. 引言2. PAI3D框架2.1 Instance Painter2.2 Adaptive Projection Refiner2.3 Fine-granular Detection Head 3. 实验结果3.1 消融实验 1. 引言 3D目标检测对于自动驾驶来说是一个非常重要的模块&a…

鸿蒙系统——强大的分布式系统

鸿蒙相比较于传统安卓最最最主要的优势是微内核分布式操作系统&#xff0c;具有面向未来&#xff0c;跨设备无缝协作&#xff0c;数据共享的全场景体验。下面简单来感受一下鸿蒙系统的多端自由流转。 自由流转概述 场景介绍 随着全场景多设备的生活方式不断深入&#xff0c;…

background 与 background-image

相同点&#xff1a;background 与 background-image都可以用于设置背景图 区别. background既可以用于设置背景图&#xff0c; 又可以用于设置CSS样式&#xff0c;还可以用于设置背景属性。 background-image只能用于设置背景图 background能设置的背景属性&#xff0c;如下&…

学习过程中遇到的 部分问题及解决办法

1.安装build wheel时报错&#xff1a; The detected CUDA version (12.1) mismatches the version that was used to compile PyTorch (11.7). Please make sure to use the same CUDA versions. 由于cuda版本和 当前虚拟环境中的pytorch-cudatoolkit版本不同&#xff0c; 解…

数据结构历年考研真题对应知识点(数组和特殊矩阵)

目录 3.4数组和特殊矩阵 3.4.2数组的存储结构 【二维数组按行优先存储的下标对应关系(2021)】 3.4.3特殊矩阵的压缩存储 【对称矩阵压缩存储的下标对应关系(2018、2020)】 【上三角矩阵采用行优先存储的应用(2011)】 【三对角矩阵压缩存储的下标对应关系(2016)】 3.4.…

【AIGC】《AI-Generated Content (AIGC): A Survey》

文章目录 相关概念What is AI-generated content?Necessary conditions of AIGCHow can AI make the content better?The industrial chain of AIGCAdvantages of large-scale pre-trained modelsGeneration of smart textPros of AIGCCons of AIGCAIGC and Metaverse 挑战潜…

【Vue】Vue.js中常见的几种语法

在 Vue.js 中&#xff0c;主要的语法可以分为以下几种&#xff1a; 插值语法 (Interpolation) 使用双大括号 {{ }} 进行文本插值。 示例&#xff1a; {{ message }} 指令语法 (Directives) 指令是特殊的标记&#xff0c;用于告诉Vue框架如何操作DOM。Vue提供了多种内置指…

算法基础-----【动态规划】

动态规划(待完善) 动规五部曲分别为&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式&#xff08;状态转移公式&#xff09;dp数组如何初始化确定遍历顺序举例推导dp数组、 动态规划的核心就是递归剪枝&#xff08;存储键值&#xff0c;…

有人物联的串口服务器USR-TCP232-410S基本测试通信和使用方案(485串口和232串口)

1.将 410S(USR-TCP232-410S&#xff0c;简称 410S 下同)的串口通过串口线(或USB 转串口线)与计算机相连接&#xff0c;通过网线将 410S 的网口 PC 的网口相连接&#xff0c;检测硬件连接无错误后&#xff0c;接入我们配送的电源适配器&#xff0c;给 410S 供电。观察指示灯状态…

Python面试宝典第1题:两数之和

题目 给定一个整数数组 nums 和一个目标值 target&#xff0c;找出数组中和为目标值的两个数的索引。可以假设每个输入只对应唯一的答案&#xff0c;且同样的元素不能被重复利用。比如&#xff1a;给定 nums [2, 7, 11, 15] 和 target 9&#xff0c;返回 [0, 1]&#xff0c;因…

《数据仓库与数据挖掘》 总复习

试卷组成 第一章图 第二章图 第三章图 第四章图 第五章图 第六章图 第九章图 第一章 DW与DM概述 &#xff08;特点、特性&#xff09; DB到DW 主要特征 &#xff08;1&#xff09;数据太多&#xff0c;信息贫乏&#xff08;Data Rich&#xff0c; Information Poor)。 &a…

计算机网络 —— 路由协议:RIP、OSPF、BGP、MPLS

路由协议 1. 定义2. IGP2.1 RIP2.2 OSPF 3. BGP4. MPLS 1. 定义 互联网中需要通过路由将数据发送至目标主机。 路由器根据**路由控制表(RoutingTable)**转发数据包&#xff0c;它根据所收到的数据包中目标主机的IP地址与路由控制表的比较得出下一个应该接收的路由器。 &…