链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网
题目描述
Gold Rong 有两个下标从 1 开始的数组 A,BA,BA,B,长度分别为 nnn 和 mmm。
Hammer 用它们生成了一个大小为 n×mn\times mn×m 的矩阵 CCC,满足 Cij=Ai∗BjC_{ij} = A_i * B_jCij=Ai∗Bj。(可以参考样例 1 )
Gold Rong 想考察 Hammer 对矩阵掌握的情况,一连抛出了 qqq 个询问,询问某个子矩阵的和。
输入描述:
第一行两个正整数 nnn 和 mmm (1≤n,m≤103)(1\le n,m\le10^3)(1≤n,m≤103) 。 第二行 nnn 个整数,代表数组 A (1≤Ai≤104)A\,(1\le A_i\le 10^4)A(1≤Ai≤104) 。 第三行 mmm 个整数,代表数组 B (1≤Bj≤104)B\,( 1 \le B_j\le 10^4)B(1≤Bj≤104) 。 第四行一个正整数 qqq ,代表有 qqq 次询问(1≤q≤103)( 1\le q\le 10^3)(1≤q≤103)。 接下来 qqq 行每行四个正整数 x1,y1,x2,y2 (1≤x1≤x2≤n,1≤y1≤y2≤m)x_1,y_1,x_2,y_2 \,(1\le x_1\le x_2\le n,1\le y_1\le y_2\le m)x1,y1,x2,y2(1≤x1≤x2≤n,1≤y1≤y2≤m) ,表示要询问一个左上角坐标为 (x1,y1)(x_1,y_1)(x1,y1) 右下角坐标为 (x2,y2)(x_2,y_2)(x2,y2) 的子矩阵的和。
输出描述:
输出共 qqq 行,每行一个整数代表子矩阵的和。
示例1
输入
复制3 2 3 2 1 2 4 2 1 1 2 2 2 1 3 1
3 2 3 2 1 2 4 2 1 1 2 2 2 1 3 1
输出
复制30 6
30 6
说明
样例 1 中, Hammer 生成的矩阵如下图。
Gold Rong 的第一个询问是以 (1,1) 为左上角,以 (2,2) 为右下角的子矩阵,其和为 30,如下图。
Gold Rong 的第二个询问是以 (2,1) 为左上角,以 (3,1) 为右下角的子矩阵,其和为 6,如下图。
示例2
输入
复制1 2 1 1 3 2 1 1 1 1 1 1 1 2
1 2 1 1 3 2 1 1 1 1 1 1 1 2
输出
复制1 4
1 4
备注:
提示:答案可能较大,请选择合适的数据类型储存。
#include<stdio.h>
int main(){
long long int a,b,c,d,e,f,h,g,x1,x2,y1,y2;
long long int z[10000],x[10000];
scanf("%lld %lld",&a,&b);
int y[a][b];
for(c=0;c<a;c++){
scanf("%lld",&z[c]);
}
for(c=0;c<b;c++){
scanf("%lld",&x[c]);
}
for(c=0;c<b;c++){
for(d=0;d<a;d++){
y[d][c]=z[d]*x[c];
}
}
scanf("%lld",&e);
for(c=0;c<e;c++){
g=0;
scanf("%lld %lld %lld %lld",&x1,&x2,&y1,&y2);
for(d=x1-1;d<y1;d++){
for(f=x2-1;f<y2;f++){
g=g+y[d][f];
}
}
printf("%lld\n",g);
}
return 0;
}