CF1292A-NEKO's Maze Game

题目:https://vjudge.net/problem/CodeForces-1292A

题意:共两行,从(1,1)到(2,n)每过一个时刻会有一个位置的状态变化,从能到达这个位置变成不能到达,或从不能到达变成能到达,问在每个时刻中是否能从起点到终点。

分析:对于某一行的一个障碍,要形成阻碍,必须在另一行的该位置或者相邻位置存在障碍。也就是说,假设a[1][y]存在障碍,那么a[2][y-1]或者a[2][y]或者a[2][y+1]存在障碍才能形成阻碍。故我们可以两两组成一组并计数,每存在一组就加一,每消失一组就减一,如果计数为0就可以通过。

#include <stdio.h>
int a[3][100100];
int n,q,x,y;
int main(void){
    scanf("%d %d",&n,&q);
    int flag=0;
    while(q--){
        scanf("%d %d",&x,&y);
        if(!a[x][y]){
            a[x][y]=1;
                if(a[3-x][y+1])flag++;
            if(a[3-x][y])flag++;
            if(a[3-x][y-1])flag++;
        }
        else{
            if(a[3-x][y+1])flag--;
            if(a[3-x][y])flag--;
            if(a[3-x][y-1])flag--;
            a[x][y]=0;
        }
        if(flag)printf("No\n");
        else printf("Yes\n");
    }
}

猜你喜欢

转载自www.cnblogs.com/yanying7/p/12358237.html