Codeforces Round #614 (Div. 2)C - NEKO's Maze Game

C - NEKO's Maze Game

题目链接:http://codeforces.com/contest/1293/problem/C

题意:给你一个2xn的矩阵,让你判断每步之后是否能从(1,1)走到(2,n),一开始都是可行走的,然后给出q次查询,每次查询的(x,y)首次出现该点是封闭的,然后该点出现则翻转变成可行走的。

思路:其实封闭后判断的是[3-x]的那条边,然后看的是[y-1],[y],[y+1]这三个点,判断即可,详解看注释

// 
// Created by HJYL on 2020/1/14.
//
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
int main()
{
    int n,q;
    int a[3][maxn];
    scanf("%d%d",&n,&q);
    int x,y;
    int sum=0;
    for(int i=0;i<q;i++)
    {
        scanf("%d%d",&x,&y);
        if(a[x][y])//该点之前是封闭的,马上是可行走的
            sum-=a[3-x][y-1]+a[3-x][y]+a[3-x][y+1];//sum减去相反边对应的三个点的情况
        else//该点之前是可行走的,马上是封闭不可走的
            sum+=a[3-x][y-1]+a[3-x][y]+a[3-x][y+1];//sum加上相反边对应的三个点的情况
        if(!sum)//sum为0 则说明存在可行走的路线
            printf("Yes\n");
        else
            printf("No\n");
        a[x][y]^=1;//这时候要更新点的状态,^1就是取非a[x][y],0变成1,1变成0
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Vampire6/p/12219212.html