Codeforces1293C 模拟构造 类似dfs

2*n的迷宫,从(1,1)出发到(2,n),初始时全部的都是地面,每次询问会把一个地面给变成熔浆,熔浆变成地面,熔浆不能通过,问是否可以走到。
每次变成熔浆的话只会对这个点对面的相邻的三个点,所以每次查询只需要判断是否对面的相邻的三个点是否都是地面就行。
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
const int INF=0x3f3f3f3f;
typedef long long ll;
ll n,q;
ll r,c,vis[3][maxn],step;
int main(){
	cin>>n>>q;
	while(q--){
	
		
		cin>>r>>c;
		if(!vis[r][c]){
			vis[r][c]=1;
			if(r==1){
				if(vis[2][c]) step+=2;
				if(vis[2][c-1]) step+=2;
				if(vis[2][c+1]) step+=2;
			}
			else{
				if(vis[1][c]) step+=2;
				if(vis[1][c-1]) step+=2;
				if(vis[1][c+1])	step+=2;
			}
		}
		else{	//熔浆变土地 
			vis[r][c]=0;
			if(r==1){
				if(vis[2][c]) step-=2;
				if(vis[2][c-1]) step-=2;
				if(vis[2][c+1]) step-=2; 
			}
			else{
				if(vis[1][c]) step-=2;
				if(vis[1][c-1]) step-=2;
				if(vis[1][c+1]) step-=2;
			}
		}
		if(step)
			cout<<"NO"<<endl;
		else
			cout<<"YES"<<endl;
	}
	return 0;
}
发布了224 篇原创文章 · 获赞 6 · 访问量 5861

猜你喜欢

转载自blog.csdn.net/qq_40423146/article/details/104092486