题面
题解
从学考回归oi第二题。。
复习二维前缀和。
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int num=0;char c=' ';bool flag=true;
for(;c>'9'||c<'0';c=getchar())
if(c=='-')
flag=false;
for(;c>='0'&&c<='9';num=(num<<3)+(num<<1)+c-48,c=getchar());
return flag ? num : -num;
}
const int N=5020;
int n,R,a[N+100][N+100];
void init(){
memset(a,0,sizeof a);
n = read();
R = read();
for(int i = 1;i <= n; i++) {
int x=read();
int y=read();
int v=read();
a[x+1][y+1]+=v;
}
}
void work1(){
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
}
const int INF = 0x7F7F7F7F;
int get(int x,int y){
int x2=x-R;
int y2=y-R;
return a[x][y]-a[x2][y]-a[x][y2]+a[x2][y2];
}
void work2() {
int ans = -INF;
for(int x = R;x <= N; x++) {
for(int y = R;y <= N; y++) {
ans = max(ans, get(x,y));
}
}
printf("%d\n",ans);
}
void check(){
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++)
printf("%d ",a[i][j]);
cout<<endl;
}
}
int main(){
init();
work1();
work2();
//check();
return 0;
}
我RE和WA了十多次以后发现调试语句没有注释掉。。