完完全全的暴力bfs

用队列存三个人每秒的状态,然后每次处理队首元素时直接判断小A是不是死了,或者是不是已经到了魔王的地方了。

注意一点:

这种模拟移动的题目

1.尽量写出每一种的移动状态,然后用数组来存。到时候直接枚举哪一种状态即可。

2.对于固定移动的两个人,也用类似的方法。

这样写的代码较少,可以极大减少出错率。

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#define rel(a) a=readl()
#define r(i,a,b) for(int i=a;i<=b;i++)
#define rr(i,a,b) for(int i=a;i>=b;i--)
#define r2(i,a,b) for(int i=a;i<=b;i+=2)
#define re(a) a=read()
#define pr(a) printf("%d\n",a)
#define in inline
#define ll long long
#define db double
#define id(i,j) ((i-1)*m+j)
using namespace std;
const int N=51;
inline int read(){char ch=getchar();int w=1,x=0;while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0',ch=getchar();}return x*w;
}
db d;
int n,m,s,mx[9]={0,1,-1,0,0},my[9]={0,0,0,-1,1},Kmx[2][N<<1],Kmy[2][N<<1],x,xx,y,yy,len[2];
struct point{int x,y;bool o;
}D[N*N];
struct node{point K[2],now;int out,sum;
};
queue<node>q;
in db dis(point a,point b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}
in void bfs(){node fr;fr.K[0]=D[id(x,y)],fr.K[1]=D[id(xx,yy)],fr.now=D[id(x,y)],fr.out=fr.sum=0;q.push(fr);//q.push((node){D[id(x2,y2)],D[id(x1,y1)],D[id(x1,y1)],0,0});while(!q.empty()){node fr=q.front();q.pop();if(fr.out>s)continue;point now=fr.now,Kn[2],nown;int sum=fr.sum,out=fr.out,nx,ny;if(now.x==fr.K[1].x&&now.y==fr.K[1].y){printf("%d\n",sum);exit(0);}node nstep;r(i,0,1){nx=fr.K[i].x+Kmx[i][sum%len[i]],ny=fr.K[i].y+Kmy[i][sum%len[i]];if(nx<=n&&nx>=1&&ny<=m&&ny>=1&&!D[id(nx,ny)].o)Kn[i]=D[id(nx,ny)];else Kn[i]=fr.K[i];}r(i,0,4){nx=now.x+mx[i],ny=now.y+my[i];if(nx<=n&&nx>=1&&ny<=m&&ny>=1&&!D[id(nx,ny)].o){nown=D[id(nx,ny)];r(j,0,1)nstep.K[j]=Kn[j];nstep.now=nown;nstep.out=dis(nown,Kn[0])>d?out+1:0; nstep.sum=1+sum;q.push(nstep);}}}
}
int main(){re(n),re(m),re(s);scanf("%lf",&d);char ch[N<<1];r(i,1,n){scanf("%s",ch+1);r(j,1,m)D[id(i,j)]=(point){i,j,ch[j]-'0'};}re(x),re(y),re(xx),re(yy);r(i,0,1){scanf("%s",ch);len[i]=strlen(ch);int t;r(j,0,len[i]-1){t=ch[j]-'0';if(t==0)Kmx[i][j]=Kmy[i][j]=0;else if(t==1)Kmx[i][j]=-1,Kmy[i][j]=0;else if(t==2)Kmx[i][j]=1,Kmy[i][j]=0;else if(t==3)Kmx[i][j]=0,Kmy[i][j]=-1;else if(t==4)Kmx[i][j]=0,Kmy[i][j]=1;}}bfs();return 0;
}

题解 P1374 【进攻幽暗城】相关推荐

  1. 2013腾讯编程马拉松复赛第二场部分题解

    最近真是太水啦,就拿昨天的比赛来说,只过了一道...,最后一道因为一个变量写反啦,一直WA到比赛结束,直接导致我没有看到1002这道大水题...唉,看来我真不是比赛型选手,今天把1005和1002做了 ...

  2. [Luogu]P1007 独木桥(C++题解)

    文章目录 Part 0 独木桥 题目背景 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 Part 1 Part2 Part 3 核心代码 Part 4 AC代码: P ...

  3. [JS][dfs]题解 | #迷宫问题#

    题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...

  4. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  5. [JS]题解 | #魔法数字#

    题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...

  6. [JS]题解 | #岛屿数量#

    题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...

  7. [JS] 题解:提取不重复的整数

    题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...

  8. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

  9. [洛谷1383]高级打字机 题解

    题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...

最新文章

  1. Spring Cloud应用开发(一:使用Eureka注册服务)
  2. 大数据技术下 分布式数据库何去何从?
  3. 校运动会c语言程序编写,校运动会管理系统报告C语言(含完整代码)
  4. cv2.imread读取图像结果none_python cv2.imread 读取中文路径的图片返回为None的问题
  5. mysql 5.7.13 安装配置方法图文教程(linux)
  6. 渗透中Poc、Exp、Payload、Rce与Shellcode的区别
  7. matlab 0x1表示什么意思,(x ^ 0x1)!= 0是什么意思?(What does (x ^ 0x1) != 0 mean?)
  8. git 打tag_团队开发中的 Git 实践
  9. 山西职业技术学院计算机宿舍怎么样,山西职业技术学院宿舍条件、住宿好吗、寝室情况...
  10. Dreamweaver网页设计与制作100例:用DIV+CSS技术设计的书法主题网站(web前端网页制作课作业)
  11. 软件项目管理 项目任务和任务间依赖关系
  12. 版本控制选择SVN还是Git?
  13. Mybatis-Plus(连接Hive)
  14. 直播新秀之微信小程序直播
  15. Faithfully yours, nginx. 浏览器中显示包504,504 Gateway Time-out解决办法
  16. oracle awr 执行计划,AWR(五)-利用AWR生成SQL执行计划(SQLREPORT)并进行优化 | 信春哥,系统稳,闭眼上线不回滚!...
  17. java supper关键字
  18. 直播课12-25 三个例子
  19. 进程切换之context_switch详解
  20. Hadoop/Spark大数据 Cloudera CCA Spark and Hadoop certificate CCA175认证

热门文章

  1. 希捷ST9500325AS本盘0容量数据恢复
  2. 读《About Face 4 交互设计精髓》18
  3. DP敏感度(全局,局部,平滑)
  4. python perl lisp_巴别塔-编程语言之旅【转】——C、C++、Lisp、Java、Perl、Ruby、Python核心比较...
  5. 单位办公电脑声音和摄像头被关闭,如何打开笔记本麦克风和摄像头。
  6. 孤岛危机估算章节没有回应
  7. Linux 上DenyHosts阻止SSH暴力***
  8. 海光国产CPU芯片和服务器,海光CPU芯片 一文看懂国产CPU!“造不如买”时代终
  9. z中国禽肉深加工市场盈利动态与竞争前景分析报告2022-2027年
  10. P1658 购物(贪心算法)