AcWing 99. 激光炸弹
原题链接
简单
作者:
牛奶小柒Luke
,
2021-03-24 19:49:43
,
所有人可见
,
阅读 266
二维前缀和方法,炸弹爆炸范围即为一块的面积
但是可能爆炸范围涉及到整个区域,所以首先正方形边长可能为5001
不断更新爆炸范围
然后就是简单的二维前缀和的做法
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 5010;
int cnt,r;
int n,m;
int s[N][N];
int main(){
scanf("%d%d",&cnt,&r);
r = min(5001,r);
n = m = r;
int x,y,w;
while(cnt--){
scanf("%d%d%d",&x,&y,&w);
x++,y++;
n = max(n,x),m = max(m,y);
s[x][y] += w;
}
for(int i = 1;i <= n;++i){
for(int j = 1;j <= m;++j){
s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
}
}
int res = 0;
for(int i = r;i <= n;++i){
for(int j = r;j <= m;++j){
res = max(res,s[i][j] - s[i - r][j] - s[i][j - r] + s[i - r][j - r]);
}
}
printf("%d\n",res);
return 0;
}