4444: 【入门】子矩阵求和(2061)
内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:53
解决:13
题目描述
小 同学有着很强的计算能力,张老师为了检验小 同学的计算能力,写了一个 行 列的矩阵数列。
张老师问了小 同学 个问题,每个问题会先告知小 同学 个数 表示这是矩阵中 个点的行列的值,以这两个点为一个矩形的左上角和右下角,可以从矩阵中画出一个子矩阵,张老师请小 同学计算出这个子矩阵中所有数的和。
请你编程帮助张老师计算出结果。
输入
第一行包含三个整数 。
接下来 行,每行包含 个整数。
接下来 行,每行包含四个整数 ,表示一组询问。
数据范围
。
。
,。
矩阵内元素的值均在 的范围内。
输出
共 行,每行输出一个询问的结果。
样例输入 复制
3 5 4
1 1 6 7 4
6 10 4 9 9
2 6 7 3 7
1 2 2 4
2 4 3 5
2 2 3 5
1 3 2 4
样例输出 复制
37
28
55
26
提示

#include<bits/stdc++.h> using namespace std; const int N=1010; //a代表读入的数 //b代表前缀和 int a[N][N],b[N][N]; int n,m,k; int main(){ scanf("%d%d%d",&n,&m,&k); //读入二维数组 for(int i=1;i<= n;i++){ for(int j=1;j<= m;j++){ scanf("%d" ,&a[i][j]); //求前缀和 b[i][j]=b[i-1][j]+ b[i][j-1]-b[i-1][j-1] + a[i][j]; } } //读入k次询问 int x1,y1,x2,y2; for(int i=1;i<= k;i++){ scanf("%d%d%d%d",&x1,&y1,&x2,&y2); //输出区间和 printf("%d\n",b[x2][y2]-b[x1-1][y2]-b[x2][y1-1]+b[x1-1][y1-1]); } return 0; }