AT_abc348_d [ABC348D] Medicines on Grid 题解

news/2024/10/21 11:27:56

题目传送门

题目大意:

给定一个 \(n \times m\) 的地图,要求从起点 S 走到终点 T,每移动 \(1\) 个会消耗 \(1\) 点能量,障碍 # 不能走,空地为.可以走,体力消耗至 \(0\) 也无法移动,地图位置 \((x_i,y_i)\) 有一瓶可以变成 \(e_i\) 体力的药,可以选择是否喝。

问能否抵达终点,可以输出 Yes,否则输出 No

数据范围:\(1 \leq n,m \leq 200,1 \leq x_i \leq n,1 \leq y_i \leq m,1 \leq e_i \leq n \times m\)

题目分析:

(一眼 bfs 板题,结果赛时用了标记是否走过+优先队列的假做法 WA 了 3 个点没调出来)

这题需要判断,因为吃药这个性质特殊,是变成对应的体力值 \(e\),而不是增加体力值 \(e\),存在后效性,不能使用标记是否走过+优先队列,所以需要开一个 ma[][] 数组记录走到某点的最大能量,当 \(w_{x,y}>ma_{x,y}\) 才继续搜索,切记每走到有药的地方直接先让 \(w_{x,y} \gets \max(w_{x,y},a_{x,y})\),再判断即可(a 数组存图)。

时间复杂度:\(O(nm)\),含有较大常数。

Code:

#include<bits/stdc++.h>
using namespace std;
const int N=205;
const int dx[4]={0,0,1,-1};
const int dy[4]={1,-1,0,0};//遍历方向
int n,m,k,bx,by,ex,ey,a[N][N],ma[N][N];
//(bx,by)为起点,(ex,ey)为终点,a[][]存图,障碍为 -1,自然数能走,正整数表示有药,ma[i][j]存走到(i,j)的最大能量
struct dat//自从打过 CF 的题结构体就再也不敢命名为 data
{int x,y,w;
};//结构体存走到(x,y)有 w 能量
void bfs(int x,int y)
{queue <dat> q;//开普通队列即可q.push((dat){x,y,a[x][y]});ma[x][y]=a[x][y];while(!q.empty()){dat now=q.front();q.pop();for(int i=0;i<4;i++){int xx=now.x+dx[i];int yy=now.y+dy[i];int ww=now.w-1;if(xx==ex&&yy==ey)//是否抵达终点{printf("Yes");exit(0);//结束程序}ww=max(ww,a[xx][yy]);//走到 (xx,yy) 的最大能量if(xx<1||xx>n||yy<1||yy>m||a[xx][yy]==-1||ww<=ma[xx][yy]||ww<=0) continue;//判断越界、障碍、能量,若当前能量不超过最大能量也要停止下传q.push((dat){xx,yy,ww});ma[xx][yy]=ww;//更新走到 (xx,yy) 的最大能量}}
}
signed main()
{cin>>n>>m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){char ch;cin>>ch;if(ch=='S') bx=i,by=j;//起点if(ch=='T') ex=i,ey=j;//终点if(ch=='#') a[i][j]=-1;//障碍}cin>>k;for(int i=1;i<=k;i++){int x,y,w;cin>>x>>y>>w;a[x][y]=w;//标记(x,y)有可以变成 w体力药 }if(!a[bx][by])//若初始位置没有能量,无法行动,不用进入 bfs,直接输出 -1{printf("No");return 0;}bfs(bx,by);printf("No");return 0;
}

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

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

相关文章

015 时间==事件修饰符

例如prevent对click进行修饰,阻止点击后跳转链接的默认行为其他一些较常用的

小学班级海报

这张图片是一张庆祝国际劳动节的海报,充满了节日的喜庆与对劳动者的崇高敬意。 海报的背景以红色为主色调,象征着热情与活力,营造出一种积极向上的氛围。在海报中央,一个巨大的红色数字“5”与“劳动节”的字样相结合,形成了鲜明的视觉焦点,让人一眼就能感受到节日的主题…

一键生成黑神话悟空小红书封面+文案,抓住流量,狠狠赚一笔!

前段时间,一款名为《黑神话:悟空》的单机游戏爆火出圈,关于它的消息几乎刷爆了所有的社交媒体。 虽然很多人对游戏不感冒,但你仍然可以抓住热点,发周边内容来狠狠地赚一笔。快手、抖音、小红书等各个平台流量都很火爆,比如有人制作了悟空的时装走秀视频:还有其他博主搞出…

更快的辅助生成: 动态推测

更快的辅助生成: 动态推测 ⭐ 在这篇博客文章中,我们将探讨 动态推测解码 ——这是由英特尔实验室和 Hugging Face 开发的一种新方法,可以加速文本生成高达 2.7 倍,具体取决于任务。从 Transformers🤗 发布的版本 4.45.0 开始,这种方法是辅助生成的默认模式⭐ 推测解码 推…

sas和sata的区别

本文深入探讨了SAS(Serial Attached SCSI)和SATA(Serial ATA)两种硬盘接口技术的关键差异。区别主要有:1. 技术架构和速度;2. 价格和可靠性;3. 应用场景和用户群体;4. 硬盘驱动器(HDD)和固态硬盘(SSD)支持。文章从速度、可靠性、应用场景等多个维度进行了全面比较。…

VMware

VMware 软件使用记录下载教程(24.8.16更新) Downloading VMware Fusion and Workstation Free for Personal Use 安装时出现CAB文件损坏 出现此问题的原因是安装包有问题,建议下载官方并安装 屏幕大小不自动缩放问题另一个程序已锁定文件的一部分,进程无法访问(如图)原因…

014 事件处理

上面这段代码的意思是点击按钮时,调用showInfo函数,执行函数体,出现“同学你好”弹窗 ![](https://img2024.cnblogs.com/blog/3540111/202410/3540111-20241021104954841-801859863.png)