Pipes【Codeforces 1234 C】【思维】

Codeforces Round #590 (Div. 3) C


  此题无坑,自己挖坑!

  本来比赛中应该A的代码,就因为我在N==1的时候加了一组特判,然后一直就WA2,后来发现Test 2是强数据,而我一直在怀疑我的思维错了,就一直没交了,最后这道1400分的题,赛后把那行给删了之后就过了……哎

  这道题,我们可以把序号1、2的看成是一样的,再把序号3、4、5、6看成是一样的,所以在这里我看成了1号整体与2号整体。

  然后,其实我们不难发现,路径是唯一的,也就是说我们的走法是唯一的,我们只需要判断下一步是不是还可以走就可以了。还有到达终点的过程。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define lowbit(x) ( x&( -x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define efs 1e-7
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 2e5 + 7;
int N, dir[3][maxN];
char op[3][maxN];
inline bool dfs(int x, int y, int las_op, int lx, int ly)
{
    if(x == N + 1 && y == 1) return true;
    if(x > N || y > 2 || y < 1) return false;
    if(dir[y][x] == 1)
    {
        if(lx == x) return false;
        return dfs(x + 1, y, 1, x, y);
    }
    else
    {
        if(lx == x) return dfs(x + 1, y, 2, x, y);
        else return dfs(x, 3 - y, 2, x, y);
    }
}
int main()
{
    int T; scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &N);
        for(int i=2; i>=1; i--) scanf("%s", op[i] + 1);
        for(int i=1; i<=2; i++)
        {
            for(int j=1; j<=N; j++)
            {
                if(op[i][j] <= '2') dir[i][j] = 1;
                else dir[i][j] = 2;
            }
        }
//        if(N == 1)
//        {
//            if(dir[1][2] == 2 && dir[1][1] == 2) printf("YES\n");
//            else printf("NO\n");
//            continue;
//        }
        bool flag;
        if(dir[2][1] == 1) flag = dfs(2, 2, 1, 1, 2);
        else flag = dfs(1, 1, 2, 1, 2);
        printf(flag ? "YES\n" : "NO\n");
    }
    return 0;
}
/*
1
7
3126246
2334263
NO
1
7
4211256
6254232
NO
 */

 

那组注释,血亏啊!!!QAQ涨了8分嘻嘻嘻~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wuliwuliii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值