记录编号 572599 评测结果 AAAAAAAAAA
题目名称 [HNOI 2003]激光炸弹 最终得分 100
用户昵称 Gravataryx99775 是否通过 通过
代码语言 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;
}