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

在这里插入图片描述
在这里插入图片描述
题意:有一个2*n的网格,目的是要从(1,1)走到(2,n),给出q个询问,每个询问给出一个坐标,表示该坐标点是死胡同不能走(如果给出的这个坐标点它已经是死胡同了,那么它又会变成可走的路)每次询问后问能不能从(1,1)走到(2,n)
思路:线段树找死胡同的位置?其实不用,仔细观察会发现,假设一个点变成了死胡同,它只会对它对面的三个坐标有影响,比如(1,3)变成死胡同,那么如果对面的(2,2),(2,3),(2,4)中只要有一个是死胡同的话是不是都不能走到?所以只要记录一下死胡同cnt的数量就行,死胡同数量为0的时候才能Yes。

#include <bits/stdc++.h>
const int maxn=1e5+10;
using namespace std;
int main()
{
	int l,r,n,m,s,t,p[3][maxn];
	int cnt=0;
	scanf("%d%d",&n,&m);
	while(m--)
	{
		scanf("%d %d",&l,&r);
		s=(l==1)?0:1;
		if(!p[s][r])
		{
			p[s][r]=1;
			 t=(l==1)?1:0;
			for(int i=r-1;i<=r+1;++i)
			if(p[t][i]==1) cnt++;
		}
		else {
			p[s][r]=0;
			 t=(l==1)?1:0;
			 for(int i=r-1;i<=r+1;++i)
			 if(p[t][i]==1) cnt--; 
		}
		printf("%s\n",(cnt==0)?"Yes":"No");
	}
}
发布了39 篇原创文章 · 获赞 0 · 访问量 1076

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104062041