【Codeforces Round #301 (Div. 2) C】 Ice Cave
【链接】 我是链接,点我呀:)
【题意】
给你一个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的更多相关文章
- 【Codeforces Round #301 (Div. 2) E】Infinite Inversions
[链接] 我是链接,点我呀:) [题意] 给你一个无限长的序列1,2,3,4... 然后给你n个操作. 每个操作ai,bi; 表示调换位置为ai和位置为bi的数的位置. (ai,bi<=10^9 ...
- 【Codeforces Round #301 (Div. 2) D】 Bad Luck Island
[链接] 我是链接,点我呀:) [题意] 剪刀.石头.布各有r,s,p个生活在同一个村子里. 它们两两之间相遇的几率都相同(相遇后就会按照划拳的规则判断输赢,输的人就死掉了). 问你最后只剩下剪刀,只 ...
- 【Codeforces Round #301 (Div. 2) B】 School Marks
[链接] 我是链接,点我呀:) [题意] 已知k门成绩. 总共有n门成绩. 让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x. n为奇数 [题解] 首先判 ...
- 【Codeforces Round #301 (Div. 2) A】 Combination Lock
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟水题 [代码] #include <bits/stdc++.h> using namespace std; cons ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
随机推荐
- java同步包种ArrayBlockingQueue类的分析与理解
前言: ArrayBlockingQueue类是一个堵塞队列.重要用于多线程操作的条件. 一,官方解释 一个建立在数组之上被BlockingQueue绑定的堵塞队列.这个队列元素顺序是先进先出.队列的 ...
- Hadoop for .NET Developers
Hadoop for .NET Developers(一):理解Hadoop 这些年来,大数据已经成为分析业界的兴奋源头.对于这个博客系列的目的,我将松散定义这个术语指的重点是从数据核心业务系统里数据 ...
- win7中下mysql-5.6.22免安装配置
windows下mysql免安装配置 1. 下载mysql免安装压缩包 下载mysql-5.6.22-winx64.zip 解压到本地D:\mysql-5.6.22-winx64 2. 修改配置文件 ...
- C#运算符小例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- POJ 2079 Triangle 旋转卡壳求最大三角形
求点集中面积最大的三角形...显然这个三角形在凸包上... 但是旋转卡壳一般都是一个点卡另一个点...这种要求三角形的情况就要枚举底边的两个点 卡另一个点了... 随着底边点的递增, 最大点显然是在以 ...
- 【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)) 然后其他 ...
- 构建自己的AngularJS - 作用域和Digest(一)
作用域 第一章 作用域和Digest(一) Angular作用域是简单javascript对象,因此你能够像对其它对象一样加入属性.然而,他们也有一些额外的功能:用于观測数据结构的变化.这样的观察能力 ...
- 洛谷P3374 【模板】树状数组 1(CDQ分治)
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- 1.17 Python基础知识 - 迭代器和生成器初识
可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象. 列表解析表达式:可以简单高效处理一个可迭代对象,并生成结果列表 示例代码: [ i ** 2 for i in range(10) ] ...
- map按value查找相应元素
find_if算法用来在map中查找value符合条件的pair元素,返回指向该符合条件元素的迭代器,如果找到,那么返回最后一个元素的后一个元素end(); 1.首先要定义头文件 #include & ...