lgh • 3年前
//子矩阵求和
#include <bits/stdc++.h>
using namespace std;
int A[1002][1002];//定义全局数组,初始化为0
int main()
{
int n,m,q;
scanf("%d%d%d",&n,&m,&q);//数据多,用scanf或内联函数
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)//双重循环
{
scanf("%d",&A[i][j]);
A[i][j]+=A[i-1][j]+A[i][j-1]-A[i-1][j-1];//二维的//子矩阵求和
#include <bits/stdc++.h>
using namespace std;
int A[1002][1002];//定义全局数组,初始化为0
int main()
{
int n,m,q;
scanf("%d%d%d",&n,&m,&q);//数据多,用scanf或内联函数
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)//双重循环
{
scanf("%d",&A[i][j]);
A[i][j]+=A[i-1][j]+A[i][j-1]-A[i-1][j-1];//前序和思想,书上181、182页
}
for(int i=1; i<=q; i++)//开始询问
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
int X1=min(a,c),X=max(a,c);//不一定是小的数在前,进行调整
int Y1=min(b,d),Y=max(b,d);//用if和swap也可以
int x=X1-1,y=Y1-1;//方便统计
cout<<A[X][Y]-A[x][Y]-A[X][y]+A[x][y]<<'\n';//前序和,记得换行
return 0;
}
评论: