冰清玉洁丶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. Error (167005): Can't assign I/O pad "GX_TX" to PIN_AG27 because this causes failure in the placement of the other atoms in its associated channel

    1.同时在两个GX的bank,建立两GX ip core 会出现 两个IP的cal_blk_clk信号,要保持是同一个时钟

  2. linux的DNS相关介绍(转载)

    1.DNS配置文件 /etc/hosts   这个是最早的 hostname 对应 IP 的档案: /etc/resolv.conf :这个重要!就是 ISP 的 DNS 服务器 IP 记录处: /e ...

  3. EasyRTMP实现的一套简单、高效、易用的全平台(Windows/Linux/ARM/Android/iOS)RTMP直播推送库

    本文转自EasyDarwin开源团队成员Kim的博客:http://blog.csdn.net/jinlong0603/article/details/52938980 EasyRTMP介绍 Easy ...

  4. 关于java的线程

    1 java的线程也是一个对象 所以,java线程对象也是由gc销毁的. 2 java线程对象等待被销毁的时机 当java线程执行完run()方法之后就在等待被销毁了,所以要一个线程对象不被销毁唯一的 ...

  5. js 数据获取

    http://www.cnhan.com/shantui/templates/MC500/TP001/js/template.js var qiaoContent="0";//0默 ...

  6. Rethinking the Inception Architecture for Computer Vision

    https://arxiv.org/abs/1512.00567 Convolutional networks are at the core of most state-of-the-art com ...

  7. Java实现MD5加密解密类

    http://blog.csdn.net/m_changgong/article/details/4361526

  8. mybatis入门(四)

    mybatis入门 需求:根据id查询用户的信息 mysql数据库: CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `us ...

  9. 【mysql】mysql innodb 配置详解

    MySQL innodb 配置详解 innodb_buffer_pool_size:这是InnoDB最重要的设置,对InnoDB性能有决定性的影响.默认的设置只有8M,所以默认的数据库设置下面Inno ...

  10. elasticsearch 中文分词(elasticsearch-analysis-ik)安装

    elasticsearch 中文分词(elasticsearch-analysis-ik)安装 下载最新的发布版本 https://github.com/medcl/elasticsearch-ana ...