社区讨论

55pts 11~20tle(除了 12)

P11215 【MX-J8-T3】水星湖参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m2kfszg5
此快照首次捕获于
2024/10/22 20:44
去年
此快照最后确认于
2025/11/04 16:30
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define maxn 3005
#define p1 p.first
#define p2 p.second
using namespace std;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int s[maxn][maxn],n,m,qe,l,r,k;
struct node{
	int t,x,y;
	bool operator <(const node &a) const{
		return t<a.t;
	} 
}p;
int tmp;
queue<node>q;
void qpop(){
	if(!q.empty()){ 
		p=q.front();
		if(s[p.x][p.y]==4) q.pop(),qpop();
		else if(p.t<=tmp){
			   s[p.x][p.y]=0;
			   q.pop();
			   qpop();
		     } 
	}
}
int main(){
	int t,i,j,x,y,x1,y1,x2,y2;
	cin>>n>>m>>qe>>r>>k;
	for(int k=1;k<=qe;k++){
		cin>>x1>>y1>>x2>>y2; 
		for(i=x1;i<=x2;i++){
			s[i][y1]=s[i][y2]=2;
			if(s[i][y1-1]==0) s[i][y1-1]=1;
			if(s[i][y2+1]==0) s[i][y2+1]=1;
		}
		for(j=y1;j<=y2;j++){
			s[x1][j]=s[x2][j]=2;
			if(s[x1-1][j]==0) s[x1-1][j]=1;
			if(s[x2+1][j]==0) s[x2+1][j]=1;
		}
	}
	for(l=1;l<=r;l++){
		cin>>t>>x>>y;
		tmp=t;
		qpop();
		s[x][y]+=3;
		if(s[x][y]==3) q.push({t+k+1,x,y});
		for(i=0;i<=3;i++){
			int sx=x+dx[i],sy=y+dy[i];
			if(s[sx][sy]!=0&&s[sx][sy]!=2){
				if(s[sx][sy]==1){
					queue<pair<int,int>> g;
					g.push({sx,sy});
					while(!g.empty()){
						auto p=g.front();
						g.pop();
						s[p1][p2]=4;
						for(j=0;j<=3;j++){
							int sx=p1+dx[j],sy=p2+dy[j];
							if(s[sx][sy]==1) g.push({sx,sy});
						} 
					}
				}
				else if(s[sx][sy]==3) s[sx][sy]=4;
				if(s[x][y]!=4) s[x][y]=4;
			}
		}
	}
	k=0;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++) if(s[i][j]==4) k++;
	}
	cout<<k;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...