CF1292A NEKO's Maze Game(思维)

原题链接

思路

由于只有两列,所以一个点会变成障碍的条件是他旁边的三个点都无法通行。
比如假设\((1,2)\)变成岩浆:
如果\((1,1)\)是岩浆,无法通行;
如果\((1,2)\)是岩浆,无法通行;
如果\((1,3)\)是岩浆,无法通行;
记录障碍物的个数,如果为\(0\)的话可以通行。
每次通过给定点周围的状态更新障碍物的个数。

代码:

const int maxn=1e5+10;
int a[3][maxn];
int main()
{
    int n=read,q=read,res=0;
    while(q--){
        int x=read,y=read;
        a[x][y]=!a[x][y];
        if(x==1){
            if(a[x][y]){
                if(a[2][y-1]) res++;
                if(a[2][y]) res++;
                if(a[2][y+1]) res++;
            }
            else{
                if(a[2][y-1]) res--;
                if(a[2][y]) res--;
                if(a[2][y+1]) res--;
            }
        }
        else{
            if(a[x][y]){
                if(a[1][y-1]) res++;
                if(a[1][y]) res++;
                if(a[1][y+1]) res++;
            }
            else{
                if(a[1][y-1]) res--;
                if(a[1][y]) res--;
                if(a[1][y+1]) res--;
            }
        }
        if(!res) puts("Yes");
        else puts("No");
    }
    return 0;
}

/*

**/


posted @ 2021-06-01 14:02  OvO1  阅读(43)  评论(0编辑  收藏  举报