社区讨论
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 条回复,欢迎继续交流。
正在加载回复...