记录编号 558477 评测结果 AAAAAAAAAA
题目名称 [HNOI 2003]激光炸弹 最终得分 100
用户昵称 Gravataryrtiop 是否通过 通过
代码语言 C++ 运行时间 1.708 s
提交时间 2021-01-03 11:23:29 内存使用 78.03 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn = 5005;
int s[maxn][maxn],n,r,nx,ny;
int sum(int x1,int y1,int x2,int y2) {
	int ans = s[x2][y2];
	if(x1 >= 0) {
		ans -= s[x1][y2];
	}                                
	if(y1 >= 0) {        
		ans -= s[x2][y1];                                                     
	}                 
	if(x1 >= 0&&y1 >= 0) {
		ans += s[x1][y1];
	}
	return ans;
//	return s[x2][y2] - s[x2][y1] - s[x1][y2] + s[x1][y1];
}                               
int main() {
	freopen("boom.in","r",stdin);
	freopen("boom.out","w",stdout);
	scanf("%d%d",&n,&r);
	nx = r;
	ny = r;
	for(int i = 1;i <= n;++ i) {
		int w,x,y;
		scanf("%d%d%d",&x,&y,&w);
		nx = max(x , nx);
		ny = max(y , ny);
		s[x][y] += w;
	}
	for(int i = 0;i <= nx;++ i) {
		for(int j = 0;j <= ny;++ j) {
			if(i > 0) {
				s[i][j] += s[i - 1][j];
			}
 			if(j > 0) {
 				s[i][j] += s[i][j - 1];
 			}
 			if(i > 0&&j > 0) {
 				s[i][j] -= s[i - 1][j - 1];
 			}
		}
	}
//	for(int i = 0;i <= nx;++ i) {
//		for(int j = 0;j <= ny;++ j) {
//			printf("%d ",s[i][j]);
//		}
//		putchar('\n');
//	}
	int ans = 0;
	for(int i = r - 1;i <= nx;++ i) {
		for(int j = r - 1;j <= ny;++ j) {
			ans = max(ans , sum(i - r,j - r,i,j));
		}
	}                                                        
	printf("%d",ans);
	fclose(stdin);
	fclose(stdout);
	return 0;
}