博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51 Nod 1572 宝岛地图
阅读量:4595 次
发布时间:2019-06-09

本文共 2026 字,大约阅读时间需要 6 分钟。

 

题目来源: 

基准时间限制:1 秒 空间限制:131072 KB 分值: 20 

 收藏

 关注

勇敢的水手们到达了一个小岛,在这个小岛上,曾经有海盗在这里埋下了一些宝藏。然而,我们的船快抛锚了,与此同时,船长发现藏宝图的一角被老鼠咬掉了一块。

 

藏宝图可以用一个n×m大小的矩形表示。矩形中的每一小块表示小岛中的一小块陆地(方块的边长为1米)。有一些方块表示的是海,这些块人是不能通过的。除了海不能走,其它的小方块都是可以行走的。在可行走区域里有一些小方块表示一些已知的地点。

 

另外,在地图上有k条指令。每条指令的格式表示如下:

“向y方向走n米”。

 

这里的方向有四种:“北”,“南”,“东”,“西”。如果你正确的跟着这些指令行走,并且完整的执行完所有指令,你就可以找到宝藏所在的地点。

 

但是,很不幸,由于地图中好多地方都缺失了,船长也不知道从哪些地方开始走。但是船长依然清楚地记得一些已知的地点。另外,船长也知道所有可行走区域。

 

现在船长想知道从哪些已知地点出发,按照指令,可能找到宝藏所在地。

 

Input

单组测试数据第一行包含两整数n和m(3≤n,m≤1000)。接下来的n行每行有m个字符,表示整个地图。“#”代表海。在地图矩形中,矩形的四周一圈一定是海。“.”代表可行走区域,未知地点。大写字母“A”到“Z”表示可行走区域,已知地点。所有大写字母不一定都被用到。每个字母在地图中最多出现一次。所有已知地点用不同的大写字母表示。接下来一行有一个整数k(1≤k≤10^5),接下来有k行。每行表示一条指令。指令格式为“dir len”,“dir”表示朝哪个方向走,“len”表示走几步。“dir”有四种取值“N”,“S”,“E”,“W”,对应题目中的“北”,“南”,“东”,“西”在地图中,北是在顶部,南是在底部,西是在左边,东是在右边。“len”是一个整数,范围在[1,1000]。

Output

共一行,按字典序升序打印出所有可以完整执行地图中指令的已知区域的字母,如果没有满足要求的已知区域,则打印“no solution”(没有引号)。

Input示例

输入样例16 10###########K#..######.#..##.###..L.#...####D###A.###########4N 2S 1E 1W 2

Output示例

输出样例1AD
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define inf 0x3f3f3f3ftypedef long long ll;char ch[1005][1005];int sum[1005][1005];int n,m;int KK;char dir[100005];int d[100005];vector
vec;int getsum(int i,int j,int x,int y){ return sum[x][y]-sum[i-1][y]-sum[x][j-1]+sum[i-1][j-1];}bool dfs(int i,int j,int k){ if(i<0||i>=n||j<0||j>=m||ch[i][j]=='#')return 0; if(k==KK+1)return 1; int x=i,y=j; if(dir[k]=='N')x=i-d[k]; else if(dir[k]=='S')x=i+d[k]; else if(dir[k]=='W')y=j-d[k]; else if(dir[k]=='E')y=j+d[k]; if(getsum(min(i,x)+1,min(j,y)+1,max(i,x)+1,max(j,y)+1)>0)return 0; return dfs(x,y,k+1);}int main(){#ifndef ONLINE_JUDGE freopen("in.txt","r",stdin);#endif // ONLINE_JUDGE scanf("%d%d",&n,&m); for(int i=0;i
='A'&&ch[i][j]<='Z') { if(dfs(i,j,0))vec.push_back(ch[i][j]); } } } if(vec.size()==0)cout<<"no solution"<

 

转载于:https://www.cnblogs.com/linruier/p/9832978.html

你可能感兴趣的文章
GIT 常用命令
查看>>
php接收二进制文件转换成图片
查看>>
C++虚函数原理(转)
查看>>
InnoDB存储引擎介绍-(6) 一. Innodb Antelope 和Barracuda区别
查看>>
字典树的动态与静态模板
查看>>
sscanf的最基础用法(非原创)
查看>>
A new start
查看>>
GIt-恢复进度
查看>>
[转载]几个有趣的Linux命令
查看>>
[原]openstack-kilo--issue(十六) instance can't get ip 虚拟机不能得到ip(1)
查看>>
面向对象(二)
查看>>
滑动的scrollowview的导航渐变
查看>>
[国嵌攻略][088][多线程同步]
查看>>
Ichars制作数据统计图
查看>>
NET程序之小试牛刀
查看>>
Java中的String,StringBuilder,StringBuffer三者的区别
查看>>
JavaWeb--自定义标签4--带父标签的自定义标签
查看>>
FreeBSD 下sac101.6a编译失败解决办法
查看>>
python之list
查看>>
vs 配色方案
查看>>