冰清玉洁丶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. gulp css html image js 合并压缩

    安装node.js  npm  以及安装gulp等方法我就不在这里赘述了. 接下里我主要介绍的是Gulpfile文件里面的配置该如何书写. var gulp = require('gulp');//引 ...

  2. Ubuntu NDK配置与JNI demo

    NDK配置 1.下载最新版本NDK(android-ndk-r9d-linux-x86_64.tar.bz2) 下载网页:http://developer.android.com/tools/sdk/ ...

  3. Storage Types and Storage Policies

    https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html Introduc ...

  4. keybd_event、SendInput笔记

    void keybd_event(BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo); bVk:虚拟键码 bScan:键的硬件扫描码 ...

  5. 【LeetCode】Insertion Sort List

    Sort a linked list using insertion sort. //用到O(N)的额外空间 public class Solution { public ListNode inser ...

  6. Oracle序列更新

    Oracle 数据库的时候,有时候会选择使用自增序列作为主键.但是在开发过程中往往会遇到一些不规范的操作,导致表的主键值不是使用序列插入的.这样在数据移植的时候就会出现各种各样的问题.当然数据库主键不 ...

  7. CodeChef Forest Gathering —— 二分

    题目链接:https://vjudge.net/problem/CodeChef-FORESTGA 题解: 现场赛.拿到这题很快就知道是二分,但是一直wa,怎么修改也wa,后来又换了种错误的思路,最后 ...

  8. 2U网络机箱的尺寸是多少,4U网络机箱的尺寸是多少

    厚度以4.445cm为基本单位.1U就是4.445cm,2U则是1U的2倍为8.89cm.48.26cm=19英寸,如果是标准的机架式设备,宽应该是满足这个标准的.纵深的话 有600mm或者800mm ...

  9. weixin报警脚本

    #!/bin/bash ### script name weixin.sh ### send messages from weixin for zabbix monitor ### jack ### ...

  10. html5--3.22 综合实例03

    html5--3.22 综合实例03 学习要点 通过一个综合实例来回顾学过的内容 这一章的内容比较多,不必强求一下子全记住,多做一些练习,用得多了自然就可以记住了 可以自己找一些实例练练手,比如各网站 ...