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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务