二维前缀和

题目描述

有一个n行n列的int二维数组a[][]

有m次询问

每次询问给出左上角坐标(x1,y1)和右下角坐标(x2,y2).求对应子矩阵的矩阵和

输入格式

第一行是两个整数n,m

接下来输入一个n行n列的int矩阵

接下里m行,每行四个整数,分别是x1,y1,x2,y2

输出格式

输出m行,每行是一个询问的答案

样例输入/输出

输入数据 1

9 4
5 9 5 8 5 7 7 2 1 
7 7 3 2 9 6 3 1 2 
8 6 6 3 3 2 1 1 6 
9 2 2 4 1 7 8 2 9 
1 2 4 5 6 1 2 1 8 
5 7 6 6 3 3 8 5 9 
2 8 9 2 6 3 2 9 2 
8 3 5 3 6 3 4 2 7 
7 5 5 9 1 6 9 3 9 
5 1 8 9
7 5 7 7
4 2 5 2
1 2 4 2

Copy

输出数据 1

166
11
4
24

做题!!!

首先,我们需要读取输入的n和m。然后,我们创建一个n行n列的二维数组a,并读取输入的二维数组值。

接下来,我们需要处理m次询问。对于每次询问,我们读取左上角坐标(x1, y1)和右下角坐标(x2, y2)。然后,我们使用两层循环遍历从x1到x2的行和从y1到y2的列,将对应元素累加到一个变量中。

最后,我们将每次询问的答案输出。

下面是C++的代码实现:

#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    int a[100][100];
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
    
    for (int k = 0; k < m; k++) {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        
        int sum = 0;
        for (int i = x1-1; i < x2; i++) {
            for (int j = y1-1; j < y2; j++) {
                sum += a[i][j];
            }
        }
        
        cout << sum << endl;
    }
    
    return 0;
}


 

对于样例输入数据1,输出为:

166
11
4
24

 点个赞吧,帅哥美女们,本人为小学生。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值