题目:https://vjudge.net/problem/CodeForces-1292A
题意:共两行,从(1,1)到(2,n)每过一个时刻会有一个位置的状态变化,从能到达这个位置变成不能到达,或从不能到达变成能到达,问在每个时刻中是否能从起点到终点。
分析:对于某一行的一个障碍,要形成阻碍,必须在另一行的该位置或者相邻位置存在障碍。也就是说,假设a[1][y]存在障碍,那么a[2][y-1]或者a[2][y]或者a[2][y+1]存在障碍才能形成阻碍。故我们可以两两组成一组并计数,每存在一组就加一,每消失一组就减一,如果计数为0就可以通过。
#include <stdio.h> int a[3][100100]; int n,q,x,y; int main(void){ scanf("%d %d",&n,&q); int flag=0; while(q--){ scanf("%d %d",&x,&y); if(!a[x][y]){ a[x][y]=1; if(a[3-x][y+1])flag++; if(a[3-x][y])flag++; if(a[3-x][y-1])flag++; } else{ if(a[3-x][y+1])flag--; if(a[3-x][y])flag--; if(a[3-x][y-1])flag--; a[x][y]=0; } if(flag)printf("No\n"); else printf("Yes\n"); } }
原文:https://www.cnblogs.com/yanying7/p/12358237.html