社区讨论

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 条回复,欢迎继续交流。

正在加载回复...