矩阵求和

矩阵求和

难度级别:A; 编程语言:不限;运行时间限制:3000ms; 运行空间限制:256000KB; 代码长度限制:2000000B

试题描述

矩阵求和

输入

第一行n和m,表示行数和列数
接下来n行表示矩阵
再来一行一个整数q,表示询问个数
接下来q行,每行四个整数x1,y1,x2,y2表示左上右下的坐标

输出

对于每个询问输出一个整数表示该矩阵范围内的整数和

输入示例

5 5
1 2 5 4 1
1 1 7 6 8
8 7 9 5 2
4 4 4 1 8
5 10 11 13 7
3
2 1 4 3
2 2 5 5
4 1 5 4

输出示例

45
103
52

其他说明

n,m < 2001
q < 100001
矩阵内所有数小于2000

解题思路

因为会存在若干条query,所以应该在矩阵输入的时候便进行预处理。之后利用递推关系求解。

解题代码

#include <cstdio>
#include <iostream>
using namespace std;

long long N, M, e, query, x1, y1, x2, y2, ans, sum[2005][2005] = {0};

int main() {
    while (cin >> N >> M) {
        for (int i = 1; i <= N; ++i) {
            for (int j = 1; j <= M; ++j) {
                cin >> e;
                sum[i][j] = sum[i][j-1] + sum[i-1][j] - sum[i-1][j-1] + e;
            }
        }
        cin >> query;
        while (query--) {
            cin >> x1 >> y1 >> x2 >> y2;
            ans = sum[x2][y2] - sum[x2][y1-1] - sum[x1-1][y2] + sum[x1-1][y1-1];
            cout << ans << endl;
        }
    }
    return 0;
}
posted @ 2018-03-20 09:48  yinzm  阅读(901)  评论(0编辑  收藏  举报