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

【题意】

给你一个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. java同步包种ArrayBlockingQueue类的分析与理解

    前言: ArrayBlockingQueue类是一个堵塞队列.重要用于多线程操作的条件. 一,官方解释 一个建立在数组之上被BlockingQueue绑定的堵塞队列.这个队列元素顺序是先进先出.队列的 ...

  2. Hadoop for .NET Developers

    Hadoop for .NET Developers(一):理解Hadoop 这些年来,大数据已经成为分析业界的兴奋源头.对于这个博客系列的目的,我将松散定义这个术语指的重点是从数据核心业务系统里数据 ...

  3. win7中下mysql-5.6.22免安装配置

    windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...

  4. C#运算符小例子

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. POJ 2079 Triangle 旋转卡壳求最大三角形

    求点集中面积最大的三角形...显然这个三角形在凸包上... 但是旋转卡壳一般都是一个点卡另一个点...这种要求三角形的情况就要枚举底边的两个点 卡另一个点了... 随着底边点的递增, 最大点显然是在以 ...

  6. 【Codeforces Round #457 (Div. 2) C】Jamie and Interesting Graph

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找比n-1大的最小的素数x 1-2,2-3..(n-2)-(n-1)长度都为1 然后(n-1)-n长度为(x-(n-2)) 然后其他 ...

  7. 构建自己的AngularJS - 作用域和Digest(一)

    作用域 第一章 作用域和Digest(一) Angular作用域是简单javascript对象,因此你能够像对其它对象一样加入属性.然而,他们也有一些额外的功能:用于观測数据结构的变化.这样的观察能力 ...

  8. 洛谷P3374 【模板】树状数组 1(CDQ分治)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  9. 1.17 Python基础知识 - 迭代器和生成器初识

    可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...

  10. map按value查找相应元素

    find_if算法用来在map中查找value符合条件的pair元素,返回指向该符合条件元素的迭代器,如果找到,那么返回最后一个元素的后一个元素end(); 1.首先要定义头文件 #include & ...