【链接】 我是链接,点我呀:)

【题意】

给你一个n*m的地图。
每个地图为0的时候可以安全走过,且走过后变成1.
(一定要离开之后才会变成1)
而为1的则走过之后会掉入下一层。
你一开始在初始位置(x1,y1);
且你想到达位置(x2,y2);
且要求到达(x2,y2)并且掉进下一层。
保证(x1,y1)的状态为1.
问你可行与否

【题解】

首先如果x1,y1和x2,y2重合。

那么判断一下周围有没有可以走的0状态就好->走过去再走回来

如果没有就无解

如果不重合。

那么首先判断一下(x1,y1)能否到达(x2,y2);

如果不可以则无解。

如果可以

如果x2,y2状态为1,则有解

否则

看一下(x2,y2)周围是否有两个以上的状态为0的点。(要走到(x2,y2)然后出去再回来)

或者只有一个状态为0的点,且(x2,y2)和(x1,y1)相邻 则有解。

否则无解。

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 500;
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0}; int n,m,r1,c1,r2,c2;
char s[N+10][N+10];
bool can[N+10][N+10];
bool bo[N+10][N+10]; int cnt(int x,int y){
int num = 0;
for (int i = 0;i < 4;i++){
int tx = x + dx[i],ty = y + dy[i];
if (tx<1 || tx > n) continue;
if (ty<1 || ty > m) continue;
num += can[tx][ty];
}
return num;
} void youjie(){
puts("YES");
exit(0);
} void wujie(){
puts("NO");
exit(0);
} bool dfs(int x,int y){
if (x==r2 && y == c2) return true;
if (bo[x][y] || (!can[x][y] && !(x==r1 && y==c1))) return false;
bo[x][y] = true;
bool f = false;
for (int i = 0;i < 4;i++){
int tx = x + dx[i],ty = y + dy[i];
f = f|dfs(tx,ty);
}
return f;
} int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "rt", stdin);
#endif
scanf("%d%d",&n,&m);
for (int i = 1;i <= n;i++) scanf("%s",s[i]+1);
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
if (s[i][j]=='X')
can[i][j] = 0;
else
can[i][j] = 1;
scanf("%d%d",&r1,&c1);
scanf("%d%d",&r2,&c2);
if (r1 == r2 && c1 == c2){
if (cnt(r1,c1)>0) youjie();
wujie();
}
if (!dfs(r1,c1))
wujie();
else{
if (!can[r2][c2]) youjie();
int cur = cnt(r2,c2);
if (cur > 1) youjie();
if (cur == 1 && (abs(r1-r2)+abs(c1-c2))==1) youjie();
wujie();
}
return 0;
}

【Codeforces Round #301 (Div. 2) C】 Ice Cave的更多相关文章

  1. 【Codeforces Round #301 (Div. 2) E】Infinite Inversions

    [链接] 我是链接,点我呀:) [题意] 给你一个无限长的序列1,2,3,4... 然后给你n个操作. 每个操作ai,bi; 表示调换位置为ai和位置为bi的数的位置. (ai,bi<=10^9 ...

  2. 【Codeforces Round #301 (Div. 2) D】 Bad Luck Island

    [链接] 我是链接,点我呀:) [题意] 剪刀.石头.布各有r,s,p个生活在同一个村子里. 它们两两之间相遇的几率都相同(相遇后就会按照划拳的规则判断输赢,输的人就死掉了). 问你最后只剩下剪刀,只 ...

  3. 【Codeforces Round #301 (Div. 2) B】 School Marks

    [链接] 我是链接,点我呀:) [题意] 已知k门成绩. 总共有n门成绩. 让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x. n为奇数 [题解] 首先判 ...

  4. 【Codeforces Round #301 (Div. 2) A】 Combination Lock

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟水题 [代码] #include <bits/stdc++.h> using namespace std; cons ...

  5. 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers

    [链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...

  6. 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes

    [题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...

  7. 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees

    [题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...

  8. 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory

    [题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...

  9. 【Codeforces Round #423 (Div. 2) C】String Reconstruction

    [Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...

随机推荐

  1. Intel TBB in OpenCASCADE

    Intel TBB in OpenCASCADE eryar@163.com OpenCASCADE使用了一个开源的第三方库Intel TBB,这个并行计算库主要用于网格化.布尔操作等复杂算法,可以明 ...

  2. 用ElasticSearch,LogStash,Kibana搭建实时日志收集系统

    用ElasticSearch,LogStash,Kibana搭建实时日志收集系统 介绍 这套系统,logstash负责收集处理日志文件内容存储到elasticsearch搜索引擎数据库中.kibana ...

  3. hq-源码编译

    这里编译整个项目的基本格式是 ./mk + 平台名 +项目名_客户名 +mmm +new 例如 ./mk hq6735_65c_b1k_l1 al811_doov mmm new 编译单个模块 ./m ...

  4. Linux下安装zip解压功能

    liunx服务器上默认没有安装zip命令,所以使用时需安装:apt-get install zip 或  yum install zip linux安装unzip命令:apt-get install ...

  5. es6 --- var const let

    var  const   let  区别 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1. const ...

  6. es6 ----- export 和 import

    ES6 模块不是对象,而是通过export命令显式指定输出的代码,再通过import命令输入. 下面列出几种import和export的基本语法: 第一种方式: 在lib.js文件中, 使用 expo ...

  7. jq实现回车键执行方法

    $(function(){ $(document).keypress(function (e){ if(e.keyCode == 13){ //执行你想执行的方法,keyCode代表不同的按键 } } ...

  8. 洛谷 P2437 蜜蜂路线

    P2437 蜜蜂路线 题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M<N,有多少种爬行路线? 输入输出格式 ...

  9. js11--js与C++、java异同

    function F(){ this.name = "111"; this.say = function(){alert(222);} alert(333); } var f1 = ...

  10. matlab (.m)文件生成 windows 可执行(.exe)文件

    mex -setup:设置 C 语言编译器:(如果本地安装有 visual studio 20xx 集成开发环境,则会自动选择其下的 C/C++ 编译器 ) 将运行时环境(runtime enviro ...