冰清玉洁丶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. vue项目结构设计

    感觉这个写的挺详细的,要详细了解可以看这个→ 结构详细介绍 vue项目结构图: 简单介绍: build目录是一些webpack的文件,配置参数什么的,一般不用动 config是vue项目的基本配置文件 ...

  2. kubernetes调度之pod优先级和资源抢占

    系列目录 Pod可以拥有优先级.优先意味着相对于其它pod某个pod更为重要.如果重要的pod不能被调度,则kubernetes调度器会优先于(驱离)低优先级的pod来让处于pending状态的高优先 ...

  3. mysql could not be resolved: Name or service not known

    问题: mysql DNS反解:skip-name-resolve 错误日志有类似警告: 1.120119 16:26:04 [Warning] IP address '192.168.1.10' c ...

  4. EasyDarwin开源流媒体server将select改为epoll的方法

    本文来自EasyDarwin团队Fantasy(fantasy(at)easydarwin.org) 一. EasyDarwin网络模型介绍 EventContext负责监听全部网络读写事件.Even ...

  5. springboot实战--笔记

    由于这本书看过一遍,所以这里是二次复习,记录的东西比较少,就不分章节了. 共12章,524页,预计时间是18h 第一章 spring基础: 第二章 spring常用配置: bean的Scope:sin ...

  6. Easyui datagrid 怎么添加操作按钮,rowStyler

    说明:本篇文章主要是展示怎么设置easyUI datagrid的格式,包括行样式和列样式,以及添加操作按钮列 开发环境 vs2012  asp.net mvc4 c# 1.效果图 3.HTML代码 & ...

  7. Understand .sync in Vue

    Preface The first time I met .sync modifier, I didn't know it very well. So, I seldom use that. Toda ...

  8. 发布镶嵌数据集,服务端Raster Function制作

    1.新建GDB 2.GDB里右键,New 镶嵌数据集. 3.向镶嵌数据集中添加风速TIF. 4.利用原样式,导出一个函数模板. 导出是XML. 5.发布ImageService服务时,在Functio ...

  9. JavaScript Objects in Detail

    JavaScript’s core—most often used and most fundamental—data type is the Object data type. JavaScript ...

  10. 【UVA12779占位】Largest Circle

    几何题,希望有时间回来解决掉.