当前位置: 首页 > news >正文

小d和超级泡泡堂【牛客tracker 每日一题】

小d和超级泡泡堂

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

D DD在某天醒来发现自己穿越到了小游戏《超级泡泡堂》的世界,他得到了一份地图,一个技能和三个提示。

这个地图共有n nnm mm列,行从上到下按1 ˜ n 1 \~\ n1˜n编号,列从左到右按1 ˜ m 1 \~\ m1˜m编号。地图上存在空地、石头、杂草。

这个技能是在自己当前所在位置放置一个不会对自己造成影响的炸弹,炸弹爆炸会产生火焰,火焰会向上下左右四个方向蔓延,如果火焰的蔓延方向上为空地,则会直接蔓延到空地并且在空地上开始继续蔓延,如果火焰的蔓延方向上为杂草,则会将杂草烧掉使其变为空地, 并且在新产生的空地继续蔓延,如果火焰蔓延方向上为石头,则无法继续朝这个方向蔓延,当然,火焰不可能蔓延到地图外。

三个提示分别是:

1、你可以向上下左右四个方向移动,如果那个方向上不是石头且不会移动到地图外。

2、你的技能只能使用一次。

3、你只有正确回答你最多能通过使用技能使多少杂草地变为空地才能够回到现实世界。

D DD非常想要回去现实世界玩原神,请你帮助他计算出他最多能通过使用技能使多少杂草地变为空地。

注:当火焰蔓延到另一个地方将要继续蔓延时,蔓延方式等同于在该地方重新放置炸弹。😗当火焰蔓延到另一个地方将要继续蔓延时,蔓延方式等同于在该地方重新放置炸弹。

输入描述:

第一行包含两个整数n , m ( 1 ≤ n , m ≤ 1000 ) n,m(1≤n,m≤1000)n,m(1n,m1000)

接下来n nn行每行m mm个字符,其中′ . ′ '.'.表示空地,′ # ′ '\#'#表示石头,‘ ! ′ ‘!'!表示杂草,‘ @ ’ ‘@’‘@’表示小D DD当前所处位置。

输出描述:

输出一行包含一个整数表示他最多能通过使用技能使多少杂草地变为空地。

示例1

输入:

4 4 ..!. .@.# !##! #!!!

输出:

2

解题思路

本题核心是通过广度优先搜索(BFS)模拟小D DD可移动范围及炸弹火焰蔓延效果,因火焰蔓延规则与小D DD移动规则一致(仅石头阻挡,杂草可被烧掉变为空地继续蔓延),故只需先找到小D DD的初始位置,再从该位置出发进行B F S BFSBFS:遍历上下左右四个方向,若位置在地图内、未被访问且非石头,则标记为已访问;若该位置是杂草,统计数量加1 11;将所有合法位置入队继续扩展。最终统计的杂草数量即为使用技能最多能变为空地的杂草地数量,该方法时间复杂度为O ( n × m ) O(n×m)O(n×m),适配n 、 m ≤ 1000 n、m≤1000nm1000的规模,通过B F S BFSBFS完整覆盖所有可蔓延区域,精准统计可烧毁的杂草总数。

总结

  1. 核心逻辑:火焰蔓延规则等价于小D DD的移动规则,通过B F S BFSBFS遍历所有可到达(可蔓延)区域。
  2. 关键操作:遍历过程中统计遇到的杂草数量,即为技能可烧毁的杂草地总数。
  3. B F S BFSBFS的边界条件:地图范围内、未访问、非石头,确保仅处理合法的蔓延区域。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefpair<ll,ll>pii;constll N=1e3+10;constll p=1e9+7;chara[N][N];ll vis[N][N];ll dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};intmain(){ll n,m,sx,sy,cnt=0;cin>>n>>m;for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++){cin>>a[i][j];if(a[i][j]=='@')sx=i,sy=j;}}queue<pair<ll,ll>>qu;qu.push({sx,sy});vis[sx][sy]=1;while(!qu.empty()){pair<ll,ll>cur=qu.front();qu.pop();for(ll i=0;i<4;i++){ll dx=cur.first+dir[i][0],dy=cur.second+dir[i][1];if(dx>=1&&dx<=n&&dy>=1&&dy<=n&&!vis[dx][dy]&&a[dx][dy]!='#'){if(a[dx][dy]=='!')cnt++;qu.push({dx,dy});vis[dx][dy]=1;}}}cout<<cnt<<endl;return0;}
http://www.jsqmd.com/news/392015/

相关文章:

  • 携程任我行礼品卡回收攻略,闲置卡秒变现金流的秘密 - 京顺回收
  • 2026钢结构防火涂料优选指南:这些靠谱生产商值得关注,水性防火涂料,钢结构防火涂料直销厂家口碑推荐榜单 - 品牌推荐师
  • 深入解析:计算机毕业设计springboot健身房管理系统 基于SpringBoot的健身会所综合运营平台 面向Java的智能化健身场馆服务系统
  • 旋转位置编码笔记: R矩阵相乘推导
  • 2026年2月市面上口碑好的永磁工业风扇厂商推荐排行,大型工业风扇/工业吊扇/工业排风扇,永磁工业风扇品牌推荐排行 - 品牌推荐师
  • hadoop+Spark+django基于hadoop的电商商品推荐系统设计与实现
  • MATLAB 18自由度二级斜齿轮弯—扭—轴耦合(含驱动和负载)动力学代码(考虑时变啮合刚度、...
  • hadoop+Spark+django基于hadoop的交通信息分析系统设计与实现(源码+文档+调试+可视化大屏)
  • hadoop+Spark+django基于hadoop的电商用户数据行为分析与可视化(源码+文档+调试+可视化大屏)
  • hadoop+Spark+django基于大数据的汽车销售可视化系统的设计与实现(源码+文档+调试+可视化大屏)
  • hadoop+Spark+django基于hadoop的食物营养数据分析可视化系统(源码+文档+调试+可视化大屏)
  • 山东一卡通如何回收最划算?常见问题解答及实用技巧 - 团团收购物卡回收
  • Python3 基本数据类型详解
  • 别再花钱买云服务器了!OpenClaw 本地部署保姆级教程,10分钟拥有私人AI助手
  • 书籍-沙畹《西突厥史料》
  • 三相可控整流实战手记:从参数计算到仿真验证
  • 实测对比后!降AIGC软件 千笔·专业降AIGC智能体 VS WPS AI,专科生首选
  • 抓包工具tcpdump用法说明
  • 2026百联OK卡回收指南:快速、安全的交易方式有哪些? - 团团收购物卡回收
  • Effective Modern C++ 条款38:线程句柄析构行为与Vibe Coding优化指南
  • 本科生必看!标杆级的降AIGC工具 —— 千笔·专业降AI率智能体
  • 【金仓数据库】ksql 指南(七) —— 启动和管理事务(KingbaseES 数据一致性保障)
  • 图的接近中心性(closeness centrality)
  • [AdvaGIS] 预测农作物产量
  • 拖延症福音 AI论文软件 千笔ai写作 VS Checkjie,专为本科生打造!
  • 专科生也能用!备受推崇的AI论文写作软件 —— 千笔·专业学术智能体
  • 图中顶点的距离
  • 吐血推荐 9个降AI率网站:专科生必看的降AI率工具测评与推荐
  • 从此告别拖延!8个一键生成论文工具测评:专科生毕业论文+开题报告高效写作指南
  • [LKD/Linux 内核] Linux 中的 进程, 线程