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;
}

/*

**/


原文地址:https://www.cnblogs.com/OvOq/p/14836938.html