[CodeForces][思维]NEKO's Maze Game

本题是老姚分享的题。

题目

题目链接

解说

思维题,想明白了极其简单。

首先,考虑一下什么情况下路会被封死:

[CodeForces][思维]NEKO's Maze Game_第1张图片

共有以上三种情况。

所以很显然我们不需要每次都从1到n找一遍有没有路,每改变一个格子的状态就检查一下另一列三个格子的状态即可。再用一个ans变量储存一下共有多少对足以堵死路的格子。ans为零则YES,否则就NO。

代码

 1 #include
 2 using namespace std;
 3 const int maxn=100000+5;
 4 bool a[maxn],b[maxn];
 5 int n,q;
 6 int main(){
 7     ios::sync_with_stdio(false);
 8     cin>>n>>q;
 9     int ans=0;
10     for(int i=1;i<=q;i++){
11         int x,y;
12         cin>>x>>y;
13         if(x==1){
14             if(a[y]){
15                 a[y]=0;
16                 if(b[y]) ans--;
17                 if(b[y+1]) ans--;
18                 if(b[y-1]) ans--;
19             }
20             else{
21                 a[y]=1;
22                 if(b[y]) ans++;
23                 if(b[y+1]) ans++;
24                 if(b[y-1]) ans++;
25             }
26         }
27         else{
28             if(b[y]){
29                 b[y]=0;
30                 if(a[y]) ans--;
31                 if(a[y+1]) ans--;
32                 if(a[y-1]) ans--;
33             }
34             else{
35                 b[y]=1;
36                 if(a[y]) ans++;
37                 if(a[y+1]) ans++;
38                 if(a[y-1]) ans++;
39             }
40         }
41         if(ans) cout<<"No"<<endl;
42         else cout<<"Yes"<<endl;
43     }
44     return 0;
45 }
View Code

(又找回了入门时打表的感觉)

 

幸甚至哉,歌以咏志。

你可能感兴趣的:([CodeForces][思维]NEKO's Maze Game)