NEKO's Maze Game-cf

Posted qq2210446939

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NEKO's Maze Game-cf相关的知识,希望对你有一定的参考价值。

  题意:给你一个2×n的矩阵,起点在左上,终点在右下,可以移动到本格相邻的格子里,给你q个时间点,每个时间点会有一个格子的状态发生变化,格子状态分为可走和不可走,一开始所以格子都是可走的,要求输出每个时间点能不能从起点走到终点。

 

  思路:对任意格子来说,设它的坐标为x,y,对于他的另一行的三个坐标3-x,y-1  ,3-x,y和3-x,y+1有一个是不可走的,整个道路就被塞死了,就无法从起点走到终点。也就是说整个矩阵任意一个点满足这种关系,整条路走不通,所以我们统计整个矩阵有多少组这种关系设为num,对于每个时间点,如果它是让格子解除封印,就将num减去它能减少的组数,相对应封禁格子就是让num加,在每一个时间点判断一下num是不是为0就行了。

 

  ac代码:

#include<iostream>
using namespace std;
const int maxn=1e5+10;
int n,q;
int vis[3][maxn];
int ans[maxn];//0可以,1不行
 
int check(int x,int y){
    int h=3-x;
    if(y==1){
        return vis[h][y]+vis[h][y+1];
    }
    else if(y==n){
        return vis[h][y-1]+vis[h][y];
    }
    else
        return vis[h][y-1]+vis[h][y]+vis[h][y+1];
} 
 
 
int main()
{
    cin>>n>>q;
    int x,y,num=0,now=0;
    for(int i=1;i<=q;i++){
        cin>>x>>y;
        if(vis[x][y]==0){
            num-=check(x,y);
        }
        else{
            num+=check(x,y);
        }
        if(num==0) ans[i]=0;
        else ans[i]=1;
        vis[x][y]^=1;
    }
    for(int i=1;i<=q;i++){
        if(ans[i]==0) cout<<"Yes
";
        else cout<<"No
";
    }
    return 0;
} 

以上是关于NEKO's Maze Game-cf的主要内容,如果未能解决你的问题,请参考以下文章

#614 C. NEKO's Maze Game

CodeForces 1292A NEKO's Maze Game(思维)

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

题解 CF1292A NEKO's Maze Game

CF1293C - NEKO's Maze Game 分块

CF1292A-NEKO's Maze Game