(中等) CF 585B Phillip and Trains,BFS。

  The mobile application store has a new game called "Subway Roller".

The protagonist of the game Philip is located in one end of the tunnel and wants to get out of the other one. The tunnel is a rectangular field consisting of three rows and n columns. At the beginning of the game the hero is in some cell of the leftmost column. Some number of trains rides towards the hero. Each train consists of two or more neighbouring cells in some row of the field.

All trains are moving from right to left at a speed of two cells per second, and the hero runs from left to right at the speed of one cell per second. For simplicity, the game is implemented so that the hero and the trains move in turns. First, the hero moves one cell to the right, then one square up or down, or stays idle. Then all the trains move twice simultaneously one cell to the left. Thus, in one move, Philip definitely makes a move to the right and can move up or down. If at any point, Philip is in the same cell with a train, he loses. If the train reaches the left column, it continues to move as before, leaving the tunnel.

Your task is to answer the question whether there is a sequence of movements of Philip, such that he would be able to get to the rightmost column.

  题意就是问能不能从左到右,假设车不动,然后人向右走,一次一步,分析可知只有当人在的行数是mod 3=2时才能向上下,否则只能向右。

  所以就可以直接BFS。

  但是还要注意一个问题就是如果上一步是上下那么这一步就不能是,因为这个被hack了,好不爽。。。

代码如下:

// ━━━━━━神兽出没━━━━━━
//      ┏┓       ┏┓
//     ┏┛┻━━━━━━━┛┻┓
//     ┃           ┃
//     ┃     ━     ┃
//     ████━████   ┃
//     ┃           ┃
//     ┃    ┻      ┃
//     ┃           ┃
//     ┗━┓       ┏━┛
//       ┃       ┃
//       ┃       ┃
//       ┃       ┗━━━┓
//       ┃           ┣┓
//       ┃           ┏┛
//       ┗┓┓┏━━━━━┳┓┏┛
//        ┃┫┫     ┃┫┫
//        ┗┻┛     ┗┻┛
//
// ━━━━━━感觉萌萌哒━━━━━━

// Author        : WhyWhy
// Created Time  : 2015年10月12日 星期一 18时20分55秒
// File Name     : D.cpp

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>

using namespace std;

const int MaxN=110;

int N,K;

char map1[5][MaxN];
int vis[5][MaxN];

int que[1000000];
int first,last;

void bfs()
{
    first=last=0;
    int p;
    int x,y;
    int t;
    int u;
    for(int i=1;i<=3;++i) if(map1[i][1]==‘s‘) p=i;

    que[last++]=p*1000+1;
    vis[p][1]=1;

    while(last-first)
    {
        u=que[first++];
        x=u/1000;
        y=u%1000;
        t=vis[x][y];

        if(y<N && vis[x][y+1]!=1 && map1[x][y+1]==‘.‘)
        {
            vis[x][y+1]=1;
            que[last++]=x*1000+y+1;
        }

        if(y%3==2 && x>1 && t==1 && vis[x-1][y]==0 && map1[x-1][y]==‘.‘)
        {
            vis[x-1][y]=2;
            que[last++]=(x-1)*1000+y;
        }

        if(y%3==2 && x<3 && t==1 && vis[x+1][y]==0 && map1[x+1][y]==‘.‘)
        {
            vis[x+1][y]=2;
            que[last++]=(x+1)*1000+y;
        }
    }
}

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);

    int T;
    scanf("%d",&T);

    while(T--)
    {
        scanf("%d %d",&N,&K);
        for(int i=1;i<=3;++i)
            scanf("%s",map1[i]+1);
        memset(vis,0,sizeof(vis));

        bfs();

        if(vis[1][N] || vis[2][N] || vis[3][N])
            puts("YES");
        else puts("NO");
    }

    return 0;
}

时间: 2024-10-14 19:52:25

(中等) CF 585B Phillip and Trains,BFS。的相关文章

Codeforces Round #325 (Div. 2)D. Phillip and Trains BFS

                                             D. Phillip and Trains The mobile application store has a new game called "Subway Roller". The protagonist of the game Philip is located in one end of the tunnel and wants to get out of the other one.

CF586D. Phillip and Trains

1 /* 2 CF586D. Phillip and Trains 3 http://codeforces.com/problemset/problem/586/D 4 搜索 5 */ 6 #include<cstdio> 7 #include<algorithm> 8 #include<string.h> 9 using namespace std; 10 const int Nmax=110; 11 char map[4][Nmax]; 12 int fail[4]

CF #375 (Div. 2) D. bfs

1.CF #375 (Div. 2)  D. Lakes in Berland 2.总结:麻烦的bfs,但其实很水.. 3.题意:n*m的陆地与水泽,水泽在边界表示连通海洋.最后要剩k个湖,总要填掉多少个湖,然后输出. #include<bits/stdc++.h> #define F(i,a,b) for (int i=a;i<b;i++) #define FF(i,a,b) for (int i=a;i<=b;i++) #define mes(a,b) memset(a,b,s

(中等) CF 576D Flights for Regular Customers (#319 Div1 D题),矩阵快速幂。

In the country there are exactly n cities numbered with positive integers from 1 to n. In each city there is an airport is located. Also, there is the only one airline, which makes m flights. Unfortunately, to use them, you need to be a regular custo

C. Ice Cave (CF #301 (Div. 2) 搜索bfs)

C. Ice Cave time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output You play a computer game. Your character stands on some level of a multilevel ice cave. In order to move on forward, you need to

CF 986A Fair——多源bfs

题目:http://codeforces.com/contest/986/problem/A 此题乍一看没什么不T的思路... 发现边权是1,bfs? 考虑朴素的想法,遍历所有的点,bfs,过程中更新出各种商品的最短路,然后排序加和-- 好像很不行,似乎有一大堆冗余的东西,主要因为每个点上只有一种商品啊: 不妨干脆换个思路,不是找每个点到每种商品的距离,而是找每种商品到每个点的距离,如何? 一种商品存在于多个点上,可以进行多源 bfs! 也就是 bfs 一开始的时候把多个点加进优先队列里,复杂度

(中等) CF 311B Cats Transport,斜率优化DP。

Zxr960115 is owner of a large farm. He feeds m cute cats and employs p feeders. There's a straight road across the farm and n hills along the road, numbered from 1 to n from left to right. The distance between hill i and (i - 1) is di meters. The fee

(中等) CF 585D Lizard Era: Beginning,中途相遇。

In the game Lizard Era: Beginning the protagonist will travel with three companions: Lynn, Meliana and Worrigan. Overall the game has nmandatory quests. To perform each of them, you need to take exactly two companions. The attitude of each of the com

CF G. Orientation of Edges BFS

Code #include <bits/stdc++.h> #define maxn 300009 using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } queue<int>Q; int n,m,s,edges,nn=0; int hd[maxn],to[maxn<<1],nex[maxn<