社区讨论
75 pits WA on#4 , 13 , 14 , 19 , 20 求条
P11215 【MX-J8-T3】水星湖参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2hox8ex
- 此快照首次捕获于
- 2024/10/20 22:36 去年
- 此快照最后确认于
- 2025/11/04 16:39 4 个月前
rt
代码:
CPP#include<bits/stdc++.h>
using namespace std;
const int N = 3e3 + 5;
int dx[5] = {0 , -1 , 0 , 1 , 0};
int dy[5] = {0 , 0 , 1 , 0 , -1};
struct tree{
int t , x , y;
}tr[100005];
int n , m , q1 , r , k;
int a[N][N];
queue<tree> q;
void change(int x1 , int y1 , int x2 , int y2){
a[x1][y1] += -1;
a[x2 + 1][y1] -= -1;
a[x1][y2 + 1] -= -1;
a[x2 + 1][y2 + 1] += -1;
}
bool check(int x , int y){
if(a[x][y] != 0 || x <= 0 || x > n || y <= 0 || y > m) return false;
for(int i = 1 ; i <= 4 ; i ++){
if(a[x + dx[i]][y + dy[i]] < 0) return true;
}
return false;
}
void bfs(){
while(!q.empty()){
tree w = q.front();
q.pop();
for(int i = 1 ; i <= 4 ; i ++){
int nx = w.x + dx[i];
int ny = w.y + dy[i];
if(check(nx , ny)){
q.push({w.t + 1 , nx , ny});
a[nx][ny] = w.t + 1;
}
}
}
}
void kill(){
for(int i = 1 ; i <= r ; i ++){
tree w = tr[i];
bool flag = 0;
for(int j = 1 ; j <= 4 ; j ++){
int nx = w.x + dx[j];
int ny = w.y + dy[j];
if((a[nx][ny] > 0 && a[nx][ny] <= w.t + k) || a[nx][ny] < 0) flag = 1;
}
if(!flag) a[w.x][w.y] = 0;
}
}
signed main(){
cin >> n >> m >> q1 >> r >> k;
for(int i = 1 ; i <= q1 ; i ++){
int ax , ay , bx , by;
cin >> ax >> ay >> bx >> by;
change(ax , ay , bx , by);
}
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= m ; j ++){
a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
}
}
for(int i = 1 ; i <= r ; i ++){
cin >> tr[i].t >> tr[i].x >> tr[i].y;
a[tr[i].x][tr[i].y] = tr[i].t;
q.push(tr[i]);
}
bfs();
kill();
int ans = 0;
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= m ; j ++){
if(a[i][j] > 0) ans ++;
}
}
cout << ans;
return 0;
}
求条谢谢 qwq
回复
共 0 条回复,欢迎继续交流。
正在加载回复...