记录编号 |
572599 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HNOI 2003]激光炸弹 |
最终得分 |
100 |
用户昵称 |
yx99775 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
2.416 s |
提交时间 |
2022-07-03 10:44:15 |
内存使用 |
19.61 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,r,ans=0,maxx=0,maxy=0;
int mp[5005][5005];
freopen("boom.in","r",stdin);
freopen("boom.out","w",stdout);
for(int i=0;i<=5001;i++) for(int j=0;j<=5001;j++) mp[i][j]=0;
cin>>n>>r;
for(int i=1;i<=n;i++){
int x,y,v;
cin>>x>>y>>v;
maxx=max(x,maxx); maxy=max(y,maxy);
mp[x][y]=v;
}
for(int i=1;i<=maxy;i++) mp[0][i]+=mp[0][i-1];
for(int i=1;i<=maxx;i++) mp[i][0]+=mp[i-1][0];
for(int i=1;i<=maxx;i++) for(int j=1;j<=maxy;j++) mp[i][j]+=mp[i-1][j]+mp[i][j-1]-mp[i-1][j-1];
for(int i=0;i<=maxx-r;i++) for(int j=0;j<=maxy-r;j++) ans=max(ans,mp[i+r][j+r]+mp[i][j]-mp[i+r][j]-mp[i][j+r]);
if(maxx<r) for(int j=0;j<=maxy-r;j++) ans=max(ans,mp[maxx][j+r]-mp[maxx][j]);
if(maxy<r) for(int i=0;i<=maxx-r;i++) ans=max(ans,mp[i+r][maxy]-mp[i][maxy]);
cout<<ans;
return 0;
}