题意略。

将人的移动分为3步,第一步向右,第二步是行之间的变换,第三步是向右走2步,三步加在一起算作是一次移动,计入判重数组。

在第一步时有一个特殊情况:已经越过最右边的边界线,这时graph[x][y] != '.',要进行特判。

在第二步时要注意越界和撞上火车。

在第三步时有3种情况:

1.只需走1步就可以到达边界线。此时,我需要特判。

2.走2步才能到达边界线。注意graph[x][y + 1]不能是火车。

3.不能到达边界线。注意graph[x][y + 1]和graph[x][y + 2]不能是火车。

至于为什么wa这么多次,应该是我没有考虑走路的连贯性,在棋盘上走的时候都是跳跃的。

详见代码:

#include<bits/stdc++.h>
#define maxn1 30
#define maxn2 150
using namespace std; char graph[][maxn2];
int visit[][maxn2];
int n,k,T; struct point{
int x,y;
point(int a = ,int b = ){
x = a,y = b;
}
point operator+ (point p){
return point(p.x + x,p.y + y);
}
}; bool bfs(point s){
queue<point> que;
visit[s.x][s.y] = ;
que.push(s);
while(que.size()){
point temp = que.front();
que.pop();
point nxt1 = temp + point(,);
if(nxt1.y >= n - ) return true;
if(graph[nxt1.x][nxt1.y] != '.') continue;
point nxt2;
for(int i = -;i <= ;++i){
nxt2 = nxt1 + point(i,);
if(nxt2.x < || nxt2.x > || graph[nxt2.x][nxt2.y] != '.') continue;
point nxt3 = nxt2 + point(,);
if(nxt3.y < n - && graph[nxt2.x][nxt2.y + ] == '.' && graph[nxt2.x][nxt2.y + ] == '.' && visit[nxt3.x][nxt3.y] == ){
visit[nxt3.x][nxt3.y] = ;
que.push(nxt3);
}
else if(nxt2.y + >= n - && visit[nxt3.x][nxt3.y] == ){
visit[nxt3.x][nxt3.y] = ;
que.push(nxt3);
}
else if(nxt3.y >= n - && graph[nxt2.x][nxt2.y + ] == '.' && visit[nxt3.x][nxt3.y] == ){
visit[nxt3.x][nxt3.y] = ;
que.push(nxt3);
}
}
}
return false;
} int main(){
scanf("%d",&T);
while(T--){
memset(visit,,sizeof(visit));
scanf("%d%d",&n,&k);
point start;
for(int i = ;i < ;++i){
scanf("%s",graph[i]);
if(graph[i][] == 's'){
start = point(i,);
graph[i][] = '.';
}
}
printf("%s\n",bfs(start) ? "YES" : "NO");
}
return ;
}

CodeForces 586D的更多相关文章

  1. Codeforces 586D. Phillip and Trains 搜索

    D. Phillip and Trains time limit per test: 1 second memory limit per test :256 megabytes input: stan ...

  2. CodeForces - 586D Phillip and Trains 搜索。vis 剪枝。

    http://codeforces.com/problemset/problem/586/D 题意:有一个3*n(n<100)的隧道.一个人在最左边,要走到最右边,每次他先向右移动一格,再上下移 ...

  3. 【33.33%】【codeforces 586D】Phillip and Trains

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. Codeforces 586D Phillip and Trains(DP)

    题目链接 Phillip and Trains 考虑相对位移. 每一轮人向右移动一格,再在竖直方向上移动0~1格,列车再向左移动两格. 这个过程相当于每一轮人向右移动一格,再在竖直方向上移动0~1格, ...

  5. CodeForces 586D【BFS】

    题意: s是这个人开始位置:连续相同大写字母是 Each of the k trains,相应的火车具有相应的字母: '.' 代表空: 有个人在最左列,上面有连续字母代表的火车,火车从左边出去的话,会 ...

  6. CodeForces - 586D Phillip and Trains

    这道题是一道搜索题 但是 如果没有读懂或者 或者拐过弯 就很麻烦 最多26个火车 那么每一个周期 (人走一次 车走一次) 就要更改地图 的状态 而且操作复杂 容易超时 出错 利用相对运动 计周期为 人 ...

  7. 【Mutual Training for Wannafly Union #1 】

    A.Phillip and Trains CodeForces 586D 题意:过隧道,每次人可以先向前一格,然后向上或向下或不动,然后车都向左2格.问能否到达隧道终点. 题解:dp,一开始s所在列如 ...

  8. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  9. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

随机推荐

  1. @synchronized(self)

    @synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改.这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其 它线程访问,起到线程的保护 ...

  2. mysql 分组和聚合函数

    mysql 分组和聚合函数 Mysql 聚集函数有5个: 1.COUNT() 记录个数(count(1),count(*)统计表中行数,count(列名)统计列中非null数) 2.MAX() 最大值 ...

  3. js计算元素距离顶部的高度及元素是否在可视区判断

    前言: 在业务当中,我们经常要计算元素的大小和元素在页面的位置信息.比如说,在一个滚动区域内,我要知道元素A是在可视区内,还是在隐藏内容区(滚动到外边看不到了).有时还要进一步知道,元素是全部都显示在 ...

  4. Linux - ubuntu中vi不能正常使用方向键与退格键的问题

    一度怀疑是键盘坏了! 之前安装solaris也是这个问题! 重新安装vim就可以了! $sudo apt-get remove vim-common $sudo apt-get install vim

  5. Python实现一个简单的微信跳一跳辅助

    1.  前言 微信的跳一跳相信大家都很熟悉了,而且现在各种外挂.辅助也是满天飞,反正本人的好友排行榜中已经是八九百都不足为奇了.某宝上一搜一堆结果,最低的居然只要3块多,想刷多少分就刷多少分,真是离谱 ...

  6. 捕获arm非托管磁盘虚拟机,并进行还原

    背景:非托管磁盘虚拟机"hlmcen69n1",附加了一块100GB的数据磁盘.由于arm非托管磁盘机器无法通过Portal界面直接"Capture",故只能通 ...

  7. scrapy_cookie禁用_延迟下载_自定义爬虫setting

    如何设置禁止cookie? 在setting中 添加字段: COOKIE_ENABLED = False                            # False关闭cookie,True ...

  8. Navicat查询结果不能修改的原因

    问题: 开发中常使用Navicat查询数据库,并修改数据库中的值.今天发现查询结果为只读,不能修改.一般连表查不能修改我是知道的,但是单表查居然不能修改. 解决方法: 查了下,有说表是只读,也有说是权 ...

  9. Request.getparameternames 获取form表单里面所有的请求参数 。 返回一个Enumeration类型的枚举.

    通过Enumeration的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值. 最后通过request.g ...

  10. js中的一元加法和一元减法

    大多数人都熟悉一元加法和一元减法,它们在 ECMAScript 中的用法与您高中数学中学到的用法相同. 一元加法本质上对数字无任何影响: var iNum = 20; iNum = +iNum; al ...