可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。 
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。

Input输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。Output如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。Sample Input

  1. 1
  2. 5 5 14
  3. S*#*.
  4. .#...
  5. .....
  6. ****.
  7. ...#.
  8.  
  9. ..*.P
  10. #.*..
  11. ***..
  12. ...*.
  13. *.#..

Sample Output

  1. YES

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #include <cstring>
  5. using namespace std;
  6. #define ms(x, n) memset(x,n,sizeof(x));
  7. typedef long long LL;
  8. const LL maxn = 13;
  9. const int inf = 1<<30;//每一次乘以2
  10. int N, M, T;
  11. int vis[4][maxn][maxn]; //vis为到达该点的最短时间, -1为不可达, inf为未走过
  12. char mp[4][maxn][maxn]; //地图[层数][x][y];
  13. int f[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; //前后左右, 上下
  14. bool check(int cx, int cy)
  15. {
  16. if(cx>0&&cx<=N&&cy>0&&cy<=M) return 1;
  17. else return 0;
  18. }
  19. bool Dfs(int x, int y, int z, int t)
  20. {
  21. if(mp[z][x][y]=='P') return true;
  22. if(t==T) return false;
  23. int cx, cy, cz;
  24. for(int i = 0; i < 4; i++)
  25. {
  26. cx = x+f[i][0], cy = y+f[i][1], cz = z;
  27. if(check(cx, cy) && vis[cz][cx][cy]>t+1)
  28. {
  29. if(mp[cz][cx][cy]=='.' || mp[cz][cx][cy]=='P')
  30. {
  31. vis[cz][cx][cy] = t+1; //改变时间戳
  32. if(Dfs(cx, cy, cz, t+1)) return true;
  33. }
  34. else if(mp[cz][cx][cy]=='#') //碰见传送门必传送
  35. {
  36. vis[cz][cx][cy] = t+1; //改变时间戳
  37. cz = (z==1)?2:1;
  38. if(mp[cz][cx][cy]=='#' || mp[cz][cx][cy]=='*')//*和#都不能通过
  39. {
  40. vis[cz][cx][cy] = vis[z][cx][cy] = -1; //设置为不可达
  41. continue;
  42. }
  43. vis[cz][cx][cy] = t+1;
  44. if(Dfs(cx, cy, cz, t+1)) return true; //不花费时间
  45. }
  46. }
  47. }
  48. return false;
  49. }
  50. int main()
  51. {
  52. int C;
  53. cin >> C;
  54. while(C--)
  55. {
  56. ms(vis, 0); ms(mp, 0);
  57. cin >> N >> M >> T;
  58. for(int k = 1; k <= 2; k++)
  59. for(int i = 1; i <= N; i++)
  60. for(int j = 1; j <= M; j++)
  61. {
  62. cin >> mp[k][i][j];
  63. vis[k][i][j] = inf; //初始化
  64. }
  65. //开始深搜
  66. vis[1][1][1] = 0;
  67. if(Dfs(1, 1, 1, 0)) cout << "YES\n";
  68. else cout << "NO\n";
  69. }
  70. return 0;
  71. }

AYIT-2020 609暑假集训第一周周赛题 A - A计划的更多相关文章

  1. STL 入门 (17 暑假集训第一周)

    快速全排列的函数 头文件<algorithm> next_permutation(a,a+n) ---------------------------------------------- ...

  2. 暑假集训第一周比赛C题

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/C C - 学 Crawling in process... C ...

  3. 暑假集训第一周比赛G题

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=83146#problem/G G - 向 Crawling in process... C ...

  4. 【T^T】【周赛】第一周周赛——欢迎16级的新同学

    借光光,YZC的福气(今天拿到Rank1),本来还可以更好的,前面吃M去了,ABC都很晚切,而且异常兴奋,结果WA了好多发,但还是由于水题看题不清,分析不清导致的 A Home W的数学 Descri ...

  5. (未完成)catalyst-system WriteUp(2019暑假CTF第一周reverse)

    目录 预备学习--Linux实践:ELF文件格式分析 一.概述 二.分析ELF文件头(ELF header) 三.通过文件头找到section header table,理解其内容 四.通过secti ...

  6. 欢迎来到地狱 WriteUp(2019暑假CTF第一周misc)

    目录 0707,0708,0709 题目地址:欢迎来到地狱 1.地狱伊始.jpg 1.5地狱之声.wav 2.第二层地狱.docx 3.快到终点了.zip 参考 0707,0708,0709 题目地址 ...

  7. 福建工程学院寒假作业第一周G题

    涨姿势题1 TimeLimit:1000MS  MemoryLimit:128000KB 64-bit integer IO format:%lld   涨姿势题就是所谓的优化题,在组队赛中,队伍发现 ...

  8. 暑假集训——cf热身赛部分题有感加其题解

    刚刚开始集训,集训队队长暂时还没有拉专题,而是拉了部分codeforces上过题人数在2000左右的题组成了一场热身赛(其实就是一场练习),花了一天时间终于把它刷完了,其中很多题让我学到了很多骚操作, ...

  9. 3第一周课后练习&#183;阅读计划(2)-使用指针来访问私有数据成员

    /* * Copyright (c) 2015, 计算机科学学院,烟台大学 * All rights reserved. * 文件名:test.cpp * 作 靠:刘畅 * 完成日期:2015年 3 ...

随机推荐

  1. JavaScript—深入理解函数

    当程序在调用某个函数时,做了以下的工作:准备执行环境,初始函数作用域链和arguments参数对象. 函数的声明语句 function命令声明的代码区块,就是一个函数.function命令后面是函数名 ...

  2. 微信开发所需要的的方法(签名认证、数组转字符串方法、将xml字符串转换为数组、发送xml请求方法)

    //将xml字符串转换为数组 public function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_loa ...

  3. HBase 底层原理详解(深度好文,建议收藏)

    HBase简介 HBase 是一个分布式的.面向列的开源数据库.建立在 HDFS 之上.Hbase的名字的来源是 Hadoop database,即 Hadoop 数据库.HBase 的计算和存储能力 ...

  4. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  5. SpringBoot配置文件(2)

    六.配置文件加载 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为SpringBoot的默认配置文件 file:./co ...

  6. dd命令的详细介绍

    1.命令简介  dd 的主要选项: 指定数字的地方若以下列字符结尾乘以相应的数字: b=512, c=1, k=1024, w=2, xm=number m if=file #输入文件名,缺省为标准输 ...

  7. 【Oracle】归档日志的删除操作

    [root@sha3 oracle]# rman target / Recovery Manager: Release 10.2.0.4.0 - Production on Tue Jan 20 01 ...

  8. 【Oracle】Script to Collect DRM Information (drmdiag.sql) (文档 ID 1492990.1)

    脚本对应如下: The following (drmdiag.sql) is a script to collect information related to DRM (Dyanamic Reso ...

  9. kubernets之从应用访问pod元数据以及其他资源

    一  downwardAPI的应用 1.1  前面我们介绍了如何通过configmap以及secret将配置传入到pod的容器中,但是传递的这些都是预先能够安排和只晓得,对于那些只有当pod创建起来之 ...

  10. MAVEN编译NIFI源码

    场景: 由于项目需求,需要借用NIFI进行二次开发,因此需要将NIFI源码进行修改,然后编译,办公环境无外网. 步骤: (1)   找一台可以上网(外网)的机器,安装java环境和maven环境,安装 ...