题解 | 【模板】二维前缀和

【模板】二维前缀和

https://www.nowcoder.com/practice/99eb8040d116414ea3296467ce81cbbc

开局没考虑好0行0列不应该存值,只能拿try防御一下了

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    private static long safeGet(long[][] num, int i, int j){
        try{
            return num[i][j];
        }catch(Exception e){
            return 0;
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int q = in.nextInt();
        long[][] input =  new long[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                input[i][j] = in.nextInt();
            }
        }
        long[][] dp = new long[n][m];
        dp[0][0] = input[0][0];
        for (int i = 1; i < n; i++) dp[i][0] = input[i][0]+dp[i-1][0];
        for (int j = 1; j < m; j++) dp[0][j] = input[0][j]+dp[0][j-1];
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < m; j++) {
                dp[i][j] = dp[i][j - 1] + dp[i - 1][j] + input[i][j] - dp[i - 1][j - 1];
            }
        }
        //操作开始
        int x1, x2, y1, y2;
        for (int i = 0; i < q; i++) {
            x1 = in.nextInt() - 1;
            y1 = in.nextInt() - 1;
            x2 = in.nextInt() - 1;
            y2 = in.nextInt() - 1;
            long a = dp[x2][y2];
            long b = 0, c = 0, d = 0;
            b = safeGet(dp,x2,y1 - 1);
            c = safeGet(dp,x1-1,y2);
            d = safeGet(dp,x1-1,y1 - 1);
            System.out.println(a - b - c + d);
        }
    }
}

全部评论

相关推荐

04-28 11:34
西北大学 运营
牛客4396号:不好意思,这个照片猛一看像丁真
点赞 评论 收藏
分享
04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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