H
时不时使使用玉米加农炮掩饰害羞的邻座艾莉同学
https://ac.nowcoder.com/acm/contest/120564/H
根据曼哈顿距离,dx[-2,2],dy=2-|dx|,所以对于每个点所能得到的最大值只需要把在dx,dy范围内存在的值加到一起便可,而每次增援只需要把所有包括增援在内的点都加z即可
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m,q;
cin>>n>>m>>q;
vector<vector<long long>>b(n+2,vector<long long>(m+2,0));
long long maxa=0;
int maxx=0,maxy=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int t;
cin>>t;
for(int dx=-2;dx<=2;dx++){
int k=2-abs(dx);
for(int dy=-k;dy<=k;dy++){
int x=i+dx;
int y=j+dy;
if(x<1||x>n||y<1||y>m){
continue;
}
b[x][y]+=t;
if(b[x][y]>maxa){
maxa=b[x][y];
maxx=x;
maxy=y;
}
}
}
}
}
while(q--){
int x,y,z;
cin>>x>>y>>z;
for(int dx=-2;dx<=2;dx++){
int k=2-abs(dx);
for(int dy=-k;dy<=k;dy++){
int xx=x+dx;
int yy=y+dy;
if(xx<1||xx>n||yy<1||yy>m){
continue;
}
b[xx][yy]+=z;
if(b[xx][yy]>maxa){
maxa=b[xx][yy];
maxx=xx;
maxy=yy;
}
}
}
cout<<maxx<<" "<<maxy<<"\n";
}
return 0;
}
查看15道真题和解析