没什么好说的,矩阵前缀和裸题
代码
#include<bits/stdc++.h>
using namespace std;
inline int getint(){
int x=0,p=1;
char c=getchar();
while(!isdigit(c)){
if(c=='-')p=-1;
c=getchar();
}
while(isdigit(c)){
x=(x<<3)+(x<<1)+(c^'0');
c=getchar();
}
return x*p;
}
inline void putint(int x){
if(x<0){
putchar('-');
x=-x;
}
static int buf[30];
int tot=0;
do{
buf[tot++]=x%10;
x/=10;
}while(x);
while(tot)putchar(buf[--tot]+'0');
}
int d,n;
int road[2047][2047];
int main(){
d=getint(),n=getint();
for(int i=1;i<=n;++i){
int a=getint(),b=getint(),c=getint();
road[a+200][b+200]=c;
}
for(int i=1;i<=2000;++i){
for(int j=1;j<=2000;++j){
road[i][j]+=road[i][j-1];
}
for(int j=1;j<=2000;++j){
road[i][j]+=road[i-1][j];
}
}
int ans=-1,cnt=0;
int d2=d*2+1;
for(int i=d+200;i<=d+1224;++i){
for(int j=d+200;j<=d+1224;++j){
int num=road[i][j]-road[i-d2][j]-road[i][j-d2]+road[i-d2][j-d2];
if(num>ans){
ans=num;
cnt=1;
}
else{
if(num==ans){
++cnt;
}
}
}
}
cout<<cnt<<" "<<ans<<endl;
return 0;
}

本文介绍了一道关于矩阵前缀和的经典算法题,通过快速计算矩阵中特定子区域的和来解决实际问题。文章提供了完整的C++实现代码,包括输入处理、矩阵更新及查询操作等关键步骤。
543





