zoj 计算子矩阵的平方和
2013-06-04 17:06
120 查看
做这个题目有点技巧,要算一个矩阵内元素的平方,然后相加,一般的做法超时,此时我们先把一小块一小块的矩阵的平方和算好,保存下来,然后直接求和就好了
H - Evaluate Matrix Sum
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld
& %llu
Submit Status Practice ZOJ
1636
Description
Given a matrix, the elements of which are all integer number from 0 to 50, you are required to evaluate the square sum of its specified sub-matrix.
Input
The first line of the input contains a single integer T (1 <= T <= 5), the number of test cases.
For each test case, the first line contains two integers m and n (1 <= m, n <= 500), which are the row and column sizes of the matrix, respectively. The next m lines with n numbers each gives the
elements of the matrix.
The next line contains a single integer N (1 <= N <= 100,000), the number of queries. The next N lines give one query on each line, with four integers r1, c1, r2, c2 (1 <= r1 <= r2 <= m, 1 <= c1
<= c2 <= n), which are the indices of the upper-left corner and lower-right corner of the sub-matrix in question.
Output
For each test case, first print the number of the test case, then N lines with one number on each line, the required square sum. Refer to the sample output for details.
Sample Input
Sample Output
计算和的过程需要技巧,就是每一次计算,保证都是成一个矩阵的,比如计算sum[2][1],第二行第一个,得到的不是a[1][1] + a[1][2] + a[1][3] + a[2][1], 而是
a[2][1] + a[1][1];
代码:
H - Evaluate Matrix Sum
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld
& %llu
Submit Status Practice ZOJ
1636
Description
Given a matrix, the elements of which are all integer number from 0 to 50, you are required to evaluate the square sum of its specified sub-matrix.
Input
The first line of the input contains a single integer T (1 <= T <= 5), the number of test cases.
For each test case, the first line contains two integers m and n (1 <= m, n <= 500), which are the row and column sizes of the matrix, respectively. The next m lines with n numbers each gives the
elements of the matrix.
The next line contains a single integer N (1 <= N <= 100,000), the number of queries. The next N lines give one query on each line, with four integers r1, c1, r2, c2 (1 <= r1 <= r2 <= m, 1 <= c1
<= c2 <= n), which are the indices of the upper-left corner and lower-right corner of the sub-matrix in question.
Output
For each test case, first print the number of the test case, then N lines with one number on each line, the required square sum. Refer to the sample output for details.
Sample Input
2 2 3 1 2 3 4 5 6 2 1 1 2 2 1 3 2 3 3 3 4 2 3 2 5 1 7 9 2 1 1 1 3 3
Sample Output
Case 1: 46 45 Case 2: 193
计算和的过程需要技巧,就是每一次计算,保证都是成一个矩阵的,比如计算sum[2][1],第二行第一个,得到的不是a[1][1] + a[1][2] + a[1][3] + a[2][1], 而是
a[2][1] + a[1][1];
代码:
#include <string> #include <cstring> #include <stdio.h> #include <math.h> #include <iostream> using namespace std; int a[ 510 ][ 510 ]; int sum[ 510 ][ 510 ]; int main() { int T,n,m,Q; int tp; int cas=1; int r1,c1,r2,c2; scanf("%d",&T); while( T-- ) { scanf("%d%d",&n,&m); memset(sum,0,sizeof(sum) ); for(int i=1;i<=n;i++) { tp = 0; for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); tp += a[i][j] * a[i][j]; sum[i][j] = sum[ i - 1 ][ j ] + tp; } } scanf("%d",&Q); printf("Case %d:\n",cas++); while( Q -- ) { scanf("%d%d%d%d",&r1,&c1,&r2,&c2); printf("%d\n",sum[ r2 ][ c2 ] - sum[ r1-1 ][ c2 ] - ( sum[ r2 ][ c1 - 1 ] - sum[ r1 - 1 ][ c1 - 1 ] ) ); } } return 0; }
相关文章推荐
- 使用binary search 计算开放 完全平方
- POJ C++程序设计 编程题#3:计算数列平方和
- zoj 2318 Get Out! 计算几何spfa判负环
- 动态规划-最大子矩阵和(ZOJ 1074 TO THE MAX )
- ZOJ 3203 Light Bulb (三分+计算几何)
- ZOJ 3778 Talented Chef(找规律,模拟计算,11届ACM省赛,简单)
- UVALive2362 POJ1004 HDU1064 ZOJ1048 Financial Management【数学计算+水题】
- ZOJ 1074/POJ 1050 To the Max (最大子矩阵和)
- zoj 1904 Beavergnaw 计算圆柱和圆台的体积
- 蓝桥杯 ALGO-62 算法训练 平方计算
- "反复平方"——快速计算一个数的平方
- 【计算n边形面积】zoj 1010 Area
- ZOJ 1608 Two Circles and a Rectangle(简单计算几何)
- ZOJ 3913 Bob wants to pour water (计算几何+二分)
- ZOJ 3175 Number of Containers 【数学图像性质(一个常见算式的经典计算)】
- ZOJ Problem Set - 1074 To the Max (最大和子矩阵 dp)
- ZOJ 3521 Fairy Wars oj错误题目,计算几何,尺取法,排序二叉树,并查集 难度:2
- aabb的4位平方数问题以及浮点数计算时可能产生的误差
- ZOJ 2675 Little Mammoth(计算几何)
- 计算最大子矩阵