冰清玉洁丶YCB

发布时间: 2017年6月18日 21:39   最后更新: 2017年6月18日 21:40   时间限制: 1000ms   内存限制: 256M

描述

YCB是公认的冰清玉洁,人称锦州刚猛好男儿,凌河区一把刀。

一天YCB来到了一个n × m迷宫,每一个单位或者是空地("."),或者是墙("*")。

YCB当时就不乐意了,毕竟做为锦州刚猛好男儿,怎能被区区几个墙给挡住?

于是YCB选择在一个单位放置一个东北大炸弹(如果炸弹在(x, y),那么第x行和第y列的墙都会被炸掉),而且这个炸弹可以放在任何一个单位,无论是空地(".")还是墙("*")。

但是YCB已经被愤怒冲昏了头脑,失去了最宝贵的智力。

现在YCB想知道,是否存在一个点,将东北大炸弹放在这之后,能使得迷宫里面所有的单位都为空地。

聪明的你快来帮帮YCB吧,相信你一定做不出来。

输入

单组输入
第一行是n 和 m (1 ≤ n, m ≤ 1000) — 迷宫的行数和列数。
接下来n行m列的迷宫。"."表示空地, "*"表示墙。

输出

输出是否存在一个点,使得将东北大炸弹放置在这,能使得迷宫里面所有的单位都为空地。
如果有,输出"YES",否则输出"NO"。

样例输入1 复制

3 4
.*..
....
.*..
样例输出1

YES
样例输入2 复制

3 3
..*
.*.
*..
样例输出2

NO
样例输入3 复制

6 5
..*..
..*..
*****
..*..
..*..
..*..
样例输出3

YES

宝岛地图

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

藏宝图可以用一个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,10001,1000。Output共一行,按字典序升序打印出所有可以完整执行地图中指令的已知区域的字母,如果没有满足要求的已知区域,则打印“no solution”(没有引号)。Sample Input

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

Sample Output

输出样例1
AD

两道题均可用暴力枚举完成,但会超时。我们可以利用数组记录来减少枚举,思想是空间换时间。东北大炸弹可以用数组把每行每列的障碍物个数记录下来,当访问到这一点时,不用再枚举行列,直接对行列数组值求和即可;宝岛地图是学长的题,也是利用数组记录,把可走点记为1,不可走点记为0,行列连续点值分别相加,记录区间可走点个数,前缀和,当步数+1(区间)=区间可走点个数,则可以走通。相当于给定爆炸范围的东北大炸弹。

1题:行列障碍个数 2题:行列区间可走点个数

#include<stdio.h>
#include<string.h>
int main()
{
char c;
int a[][],h[],l[];
int n,m,co1,co2,i,j,k;
scanf("%d%d",&n,&m);
getchar();
memset(a,,sizeof(a));
memset(h,,sizeof(h));
memset(l,,sizeof(l));
co1=;
for(i=;i<=n;i++){
for(j=;j<=m;j++){
scanf("%c",&c);
if(c=='*'){
a[i][j]=;
co1++;
h[i]++;
l[j]++;
}
}
getchar();
}
if(co1==) printf("YES\n");
else {
int f=;
for(i=;i<=n;i++){
for(j=;j<=m;j++){
co2=;
co2+=h[i];
co2+=l[j];
if((a[i][j]&&co1==co2-)||(!a[i][j]&&co1==co2)){
printf("YES\n");
f=;
break;
}
}
if(f) break;
}
if(!f) printf("NO\n");
}
return ;
}
#include<stdio.h>
char a[][];
char c[];
int d[];
int hh[][],ll[][];
int re[];
int main()
{
int n,m,k,x,y,i,j,l,l2;
scanf("%d%d",&n,&m);
for(i=;i<n;i++){
getchar();
scanf("%s",a[i]);
}
for(i=;i<n;i++){
for(j=;j<m;j++){
hh[i][j]=hh[i][j-];
if(a[i][j]!='#') hh[i][j]++;
}
}
for(j=;j<m;j++){
for(i=;i<n;i++){
ll[i][j]=ll[i-][j];
if(a[i][j]!='#') ll[i][j]++;
}
}
scanf("%d",&k);
for(i=;i<=k;i++){
getchar();
scanf("%c%d",&c[i],&d[i]);
}
for(i=;i<n;i++){
for(j=;j<m;j++){
if('A'<=a[i][j]&&a[i][j]<='Z'){
x=i;y=j;
for(l=;l<=k;l++){
if(c[l]=='N'){
if(d[l]+!=ll[x][y]-ll[x-d[l]-][y]) break;
x-=d[l];
}
else if(c[l]=='S'){
if(d[l]+!=ll[x+d[l]][y]-ll[x-][y]) break;
x+=d[l];
}
else if(c[l]=='E'){
if(d[l]+!=hh[x][y+d[l]]-hh[x][y-]) break;
y+=d[l];
}
else if(c[l]=='W'){
if(d[l]+!=hh[x][y]-hh[x][y-d[l]-]) break;
y-=d[l];
}
if(l==k) re[a[i][j]-'A']=;
}
}
}
}
int f=;
for(i=;i<;i++){
if(re[i]==){
printf("%c",i+'A');
f=;
}
if(i==&&f==) printf("no solution");
}
printf("\n");
return ;
}

QDUOJ 东北大炸弹 宝岛地图-枚举+数组记录+前缀和的更多相关文章

  1. 2014 网选 广州赛区 hdu 5025 Saving Tang Monk(bfs+四维数组记录状态)

    /* 这是我做过的一道新类型的搜索题!从来没想过用四维数组记录状态! 以前做过的都是用二维的!自己的四维还是太狭隘了..... 题意:悟空救师傅 ! 在救师父之前要先把所有的钥匙找到! 每种钥匙有 k ...

  2. Minimum Transport Cost(floyd+二维数组记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  3. 51 Nod 1572 宝岛地图

    1572 宝岛地图  题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 勇敢的水手们到达了一个小岛,在这个小岛上,曾 ...

  4. POJ-1703 Find them, Catch them(并查集&数组记录状态)

    题目: The police office in Tadu City decides to say ends to the chaos, as launch actions to root up th ...

  5. hdu1671 字典树记录前缀出现次数

    题意:       给你一堆电话号,问你这些电话号后面有没有相互冲突的,冲突的条件是当前这个电话号是另一个电话号的前缀,比如有 123456789 123,那么这两个电话号就冲突了,直接输出NO. 思 ...

  6. Karen and Coffee CodeForces - 816B (差分数组+预处理前缀和)

    To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, want ...

  7. 51Nod 1272最大距离 (树状数组维护前缀最小值)

    题目链接 最大距离 其实主流解法应该是单调栈……我用了树状数组. #include <bits/stdc++.h> using namespace std; #define rep(i, ...

  8. [Bug]枚举数组,并找到某些元素删除

    lldb报错:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <_ ...

  9. 再谈树---无根树转有根树( dfs搜索转化+fa数组记录父节点) *【模板】

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <vector> ...

随机推荐

  1. wlpt的提现功能

    1.<transaction id="WithdrawPre" template="pageLoaderTemplate"> <actions ...

  2. 如何设置快捷键(File Search)

    window->preferences->General->keys. 找到File Search(有搜索框的,可以搜索),然后在下方 Binding按下ctrl +h .

  3. 基于TCP的通信程序设计

    套接字(Socket)是一种跨主机进程之间的双向通信接口,每个打开的套接字都可以通过一个套接字描述符来描述,因此可以使用低级文件编程库操作套接字. TCP是一中面向连接的网络传输控制协议.它每发送一个 ...

  4. oracle数据库 操作clob对象

    clob类型,但对于这个类型处理起来还是比较麻烦的,varchar2长度为4000bytes,如果varchar2能满足楼主的需求,建议使用varchar2,下面提供了在Java 中读取clob类型的 ...

  5. GreenPlum 安装方法详解

    一.安装环境准备 1.磁盘环境准备 磁盘分区典型配置如下: 文件系统 文件格式    大小  /        ext3   50GB,Linux系统的根目录,所有的目录都挂在这个目录下面,建议大小为 ...

  6. Android Material Design 中文版

    http://www.google.com/design/spec/animation/authentic-motion.html http://www.oschina.net/question/14 ...

  7. EasyDarwin幼教云视频平台在幼教平台领域大放异彩!

    在之前的一篇方案<基于EasyDarwin云视频平台的幼儿园视频直播(手机直播/微信直播)解决方案>中,我们提到一种可以广泛应用于幼教.工厂.建筑工地以及各种现场监控的云视频平台方案,这种 ...

  8. EasyDarwin开源音频解码项目EasyAudioDecoder:EasyPlayer Android音频解码库(第二部分,封装解码器接口)

    上一节我们讲了如何基于ffmpeg-Android工程编译安卓上的支持音频的ffmpeg静态库:http://blog.csdn.net/xiejiashu/article/details/52524 ...

  9. 用live555做流媒体转发服务器?

    当我们看到这里,说明大家都有这样的一个想法:那就是如何用live555实现一个直播代理转发的流媒体服务器? 我们先不着急去讨论用live555实现流媒体转发的技术方法123,先从live555的整个架 ...

  10. Struts2访问Servlet API的三种方式

    有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...