【bfs】Replication G(P7151)

正题

P7151


题目大意

给你一个n*n的方阵,有若干机器人的起始点

机器人在每个时间会向一个方向走一步,经过D个时间后就会在相邻四个格子复制一个副本,副本会和原机器人走相同方向,同时也会复制

当任意一个机器人的操作碰到障碍,那么所有机器人都会停止操作

问你最多有多少个位置可以被机器人到达


解题思路

首先从障碍进行一遍bfs找出所有点到最近障碍的距离

然后从所有起始点进行一遍bfs,找出到达所有的最短合法路径长度(移动过程中不接触到障碍)

得到所有点的最短路径后考虑计算副本到达的位置,不难发现,如果原地不动让副本复制所到达的格子都可以直接向一个方向去到达,所以直接扩展给副本即可

code

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 1010
#define mp make_pair
#define fs first
#define sn second
using namespace std;
int n,D,ans,p[N][N],zh[N][N],to[N][N];
char c[N][N];
queue<pair<int,int> >d;
priority_queue<pair<int,pair<int,int> > >dd;
const int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
void bfs1()
{for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(c[i][j]=='#'){d.push(mp(i,j));zh[i][j]=0;}else zh[i][j]=-1;while(!d.empty()){int x=d.front().fs,y=d.front().sn;d.pop();for(int i=0;i<4;++i){int tx=x+dx[i],ty=y+dy[i];if(tx<=0||n<tx||ty<=0||n<ty)continue;if(zh[tx][ty]==-1){zh[tx][ty]=zh[x][y]+1;d.push(mp(tx,ty));}}}return;
}
void bfs2()
{for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(c[i][j]=='S'){d.push(mp(i,j));to[i][j]=0;}else to[i][j]=-1;while(!d.empty()){int x=d.front().fs,y=d.front().sn;d.pop();if(to[x][y]/D==zh[x][y])continue;for(int i=0;i<4;++i){int tx=x+dx[i],ty=y+dy[i];if(tx<=0||n<tx||ty<=0||n<ty)continue;if(to[tx][ty]==-1&&to[x][y]/D<zh[tx][ty]){//先走再复制,所以算当前节点的半径to[tx][ty]=to[x][y]+1;d.push(mp(tx,ty));}}}return;
}
void bfs3()
{for(int i=1;i<=n;++i)for(int j=1;j<=n;++j)if(to[i][j]>=0){to[i][j]/=D;if(to[i][j]==zh[i][j])to[i][j]--;//走到i,j之后不能复制就要特判dd.push(mp(to[i][j],mp(i,j)));}while(!dd.empty()){pair<int,pair<int,int> >h=dd.top();dd.pop();int v=h.fs,x=h.sn.fs,y=h.sn.sn;if(p[x][y])continue;p[x][y]=1;ans++;for(int i=0;i<4;++i){int tx=x+dx[i],ty=y+dy[i];if(tx<=0||n<tx||ty<=0||n<ty)continue;if(!p[tx][ty]&&c[tx][ty]!='#'&&to[tx][ty]<v-1){to[tx][ty]=v-1;//向四周扩展dd.push(mp(to[tx][ty],mp(tx,ty)));}}}return;
}
main()
{scanf("%d%d",&n,&D);for(int i=1;i<=n;++i)scanf("%s",c[i]+1);bfs1();bfs2();bfs3();printf("%d",ans);return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1151 LCA in a Binary Tree 甲级

题意&#xff1a; 给定前序遍历和中序遍历&#xff0c;问u和v的lca &#xff08;先是中序&#xff0c;后是中序&#xff09; 题解&#xff1a; 方法一&#xff1a; 参考题解 将树映射到一颗BST上&#xff0c;在BST上找到答案然后再映射回原本的树 方法二&#xff1a; 参考题…

牛客练习赛 58——树链剖分

A - 牛能和宝石 签到题 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N100010; int a[N],b[N]; int n; int main() {IO;int T1;//cin>>…

确认过眼神,你是ApacheWay的人 | COSCon‘18 特辑

*大会官网&#xff1a;http://coscon.kaiyuanshe.cn/*报名链接&#xff1a;点击文末“阅读原文”如果您对 Apache 感兴趣那么中国开源年会COSCon18将是您不可错过的一站写在大会前为什么本土开源项目对 Apache 青睐相加我们用实际数据说话Apache 顶级项目Apache CarbonData Car…

P6793-[SNOI2020]字符串【广义SAM,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/P6793 题目大意 给出两个长度为nnn的字符串&#xff0c;取出他们所有长度为kkk的连续子串分别构成两个可重集合A,BA,BA,B。 你每次可以花费xxx点代价修改AAA中一个字符串长度为xxx的后缀&#xff0c;求至少花费多少代价能够…

【DP】Bovine Genetics G(P7152)

正题 P7152 题目大意 对于一个原串&#xff08;只有四种字符&#xff09;&#xff0c;先将所有相邻且相同的字符分割开&#xff0c;对分割得到的若干段翻转&#xff0c;得到编辑后的字符串&#xff0c;现在给出编辑后的字符串&#xff08;有一些位置不确定&#xff09;&#…

牛客练习赛 57——manacher算法 树形dp?

A - Tic-Tac-Toe 直接考虑每个人8种赢的情况即可。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N5; char g[N][N]; int main() {//IO;int …

1148 Werewolf - Simple Version 甲级

题意&#xff1a; 有n个玩家&#xff0c;有两个狼人&#xff0c;有两人说慌&#xff08;其中一个为狼人一个为非狼人&#xff09;&#xff0c;找出狼人是谁&#xff1f; 题解&#xff1a; 暴力枚举 先枚举i和j为狼人&#xff0c;然后从1号开始假设其说谎&#xff0c;然后判断…

asp.net core 错误定位 vs2017 远程调试部署在centos上的asp.net core程序

前言程序运行中会出现各种BUG。 排除BUG有三种方式。一、访问页面直接报错误信息出于安全&#xff0c;服务器是关闭这个功能的。在centos上可以用 命令设置环境变量来解决&#xff1a; export ASPNETCORE_ENVIRONMENTDevelopment二、console输出console.WriteLine(" hel…

P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】

正题 题目链接:https://www.luogu.com.cn/problem/P4585 题目大意 nnn个集合&#xff0c;开始每个集合中有一个数字。 开启新的一天并且往集合sss中插入数字vvv询问ddd天以内插入的数字&#xff08;包括最开始的&#xff09;中l∼rl\sim rl∼r集合内的数字异或上xxx的最大值。…

【图论】Tree之最小方差树(bzoj 3754)

正题 bzoj 3754 题目大意 求最小方差生成树 解题思路 可以枚举数值之和&#xff0c;然后跑最小生成树 每次加25&#xff0c;这样可以提高速度&#xff0c;且如果平均数接近&#xff0c;那么所选的边和答案会相同&#xff0c;再暴力跑一遍即可 code #include<cmath> …

1147 Heaps

题意&#xff1a; 给一个二叉树的层次遍历&#xff0c;问是什么类型的堆&#xff0c;是大顶堆还是小顶堆&#xff0c;然后输出这个树的后续遍历 题解&#xff1a; 大小堆根直接比较a[i]与a[i/2]即可 因为给的树的层次遍历&#xff0c;i就是i/2儿子 后序遍历&#xff0c;对于…

AspNet Core下利用 app-metrics+Grafana + InfluxDB实现高大上的性能监控界面

在日常系统工作中&#xff0c;我们为了洞察系统的问题和运作情况通常会记录日志的方式来进行分析&#xff0c;但是在很多情况下都是被动的在出问题后才会去查日志。在很多时候&#xff0c;我们可能更需要相对实时的了解整个系统或者某一时段的运行的情况&#xff0c;诸如系统出…

ACL Beginner Contest 总结——F多项式待补

A - Repeat ACL 签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<string> #include<cstring> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typed…

P5319-[BJOI2019]奥术神杖【0/1分数规划,AC自动机,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5319 题目大意 一个长度为nnn的串TTT&#xff0c;用0∼90\sim 90∼9填充所有的...。 然后给出mmm个串和它们的价值。 一个填充方案的价值等于&#xff1a;若TTT中出现了ccc个给出的串&#xff0c;那价值等于它们的价值乘积…

微软向Linux表白: 向Linux社区开放60000多项专利

10 月 10 日&#xff0c;微软在博客中宣布正式加入开放创新网络&#xff08;Open Invention Network, 简称“OIN”&#xff09;&#xff0c;向所有开源专利联盟的成员开放其专利组合。对开源&#xff0c;微软是认真的OIN 的首席执行官 Keith Bergelt 在采访中说道&#xff1a;微…

【线段树】扇形面积并(P3997)

正题 P3997 题目大意 给若干扇形&#xff0c;问你叠了至少k次的面积 解题思路 把园展开&#xff0c;然后用线段树维护每个点的出现次数 当最大次数大于k&#xff0c;用log的时间查找该点&#xff0c;然后计算结果&#xff0c;因为最多只有2*n次查找&#xff0c;所以不会TLE…

Codeforces Round #675 (Div. 2)——F主席树待补?

A - Fence 把凑得那条边当成最长的边&#xff0c;如果abcd那么将会共线&#xff0c;只要稍微abc大一点即可满足四边形。 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath…

牛客网dp专题 数位dp

文章目录数位dp例题&#xff1a;NC116652 uva11038 How many 0sNC15035 送分了QAQNC20669 诡异数字NC20665 7的意志NC17385 Beautiful NumbersCF55D NC108918 Beautiful numbers习题&#xff1a;NC17867 明七暗七NC19327 好朋友NC19945 [CQOI2016]手机号码NC20268 [SCOI2009]WI…

YbtOJ#463-序列划分【二分答案,线段树,dp】

正题 题目链接:https://www.ybtoj.com.cn/problem/463 题目大意 给出长度为nnn的序列A,BA,BA,B。要求划分成若干段满足 对于任何i<ji<ji<j&#xff0c;若iii和jjj不是同一段的&#xff0c;要求满足Bi>AjB_i>A_jBi​>Aj​每一段AiA_iAi​的最大值的和不能超…

微软技术大会预览:DevOps顾问是怎样开发自己的产品的

“没有人比我们更懂DevOps”&#xff0c;这句话不是谁都敢说的。从无人问津到整个IT行业趋之若鹜&#xff0c;DevOps火起来也不过是3年的事情&#xff0c;但是leansoftX.com的DevOps资深顾问都是在这个行业已经摸爬滚打了10年的老兵了&#xff0c;从一开始的SDLC&#xff0c;到…