码迷,mamicode.com
首页 > 其他好文 > 详细

NEKO's Maze Game-cf

时间:2020-01-21 23:18:44      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:关系   code   for   color   iostream   cout   div   判断   mes   

  题意:给你一个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\n";
        else cout<<"No\n";
    }
    return 0;
} 

NEKO's Maze Game-cf

标签:关系   code   for   color   iostream   cout   div   判断   mes   

原文地址:https://www.cnblogs.com/qq2210446939/p/12227230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!