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

Posted stelayuri

tags:

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

原题题面:https://codeforces.com/contest/1293/problem/C

 

题目大意:

有一个2*n的图

NEKO#ΦωΦ要带领mimi们从(1,1)的点走到(2,n)的点

每次会操作一个点,从可以通过到不可以通过,不可以通过到可以通过

每操作一次要回答一次NEKO#ΦωΦ能不能带领他们走到那里

 

解题思路:

用cnt记录不能走的种类数
两个数组,分别对应r为1和r为2
值用0和1表示能通过和不能通过
如果当前操作的是点c
如果操作完之后这个点的值变成了0(可以通过了)
那么就考虑另外一个r的数组的 c-1 c c+1 三个点的情况
如果三个点满足题意(大于等于1且小于等于n)并且点值为1(不能通过),说明这个点能和这次操作被消除的点构成一个障碍
而此时这个点变成了0,说明障碍消除了,所以不能走的种类数可以-1
总而言之,c-1 c c+1 这三个点有多少个1,拿cnt就减几
如果操作完变成了1(不能通过了)
照常,看另外一个r数组的 c-1 c c+1 这三个点有多少个1,拿cnt就加几(不能走的种类数会增加)
最后看cnt的状态
如果cnt为0则表示能走
否则不能走

 1 /*
 2 Written By. StelaYuri
 3 On 2020/01/19
 4 */
 5 #include<bits/stdc++.h>
 6 using namespace std;
 7 int a[100050],b[100050];
 8 void solve(){
 9     int n,q,i,x,y,cnt=0;
10     memset(a,0,sizeof a);
11     memset(b,0,sizeof b);
12     cin>>n>>q;
13     while(q--){
14         cin>>x>>y;
15         if(x==1){
16             a[y]=1-a[y];
17             if(a[y]){
18                 if(y-1>0)
19                     cnt+=b[y-1];
20                 cnt+=b[y];
21                 if(y+1<=n)
22                     cnt+=b[y+1];
23             }
24             else{
25                 if(y-1>0)
26                     cnt-=b[y-1];
27                 cnt-=b[y];
28                 if(y+1<=n)
29                     cnt-=b[y+1];
30             }
31         }
32         else{
33             b[y]=1-b[y];
34             if(b[y]){
35                 if(y-1>0)
36                     cnt+=a[y-1];
37                 cnt+=a[y];
38                 if(y+1<=n)
39                     cnt+=a[y+1];
40             }
41             else{
42                 if(y-1>0)
43                     cnt-=a[y-1];
44                 cnt-=a[y];
45                 if(y+1<=n)
46                     cnt-=a[y+1];
47             }
48         }
49         cout<<(cnt==0?"Yes":"No")<<endl;
50     }
51 }
52 int main(){
53     ios::sync_with_stdio(0);
54     cin.tie(0);cout.tie(0);
55     solve();
56     
57     return 0;
58 }

以上是关于Codeforces Round #614 (Div. 2) C - NEKO's Maze Game的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2)

Codeforces Round #614 选讲

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2) A-E简要题解