也许acm的迷人之处就在于这样的题目,当然也就是一些大牛嘴里的水题。
这一题,我做的时候想通过实例去发现他们之间是否存在什么关系,可惜数很小的时候情况就非常多,感觉无从下手,一直也没有解出来。
其实,就是遇到这样的问题,不能站在一个高度上去看这个问题,及思维局限在了繁杂的实例上。
这一题可以这样考虑:
假如有m行n列,首先,考虑单独的一行,一行一共有n个矩形,一个小单位矩形组成的矩形有n个,两个小单位矩形组成的矩形有n-1个,.......n个单位小矩形组成的矩形有1个,所以一行一共有
n×(n+1)/2个,然后,把每一行缩成一个小单元矩形,则考虑一列的时候和考虑行的时候一样,每一列有m×(m+1)/2个,所以结果就是n×(n+1)/2×m×(m+1)/2。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 int main() 6 { 7 8 int t; 9 scanf("%d",&t); 10 while(t--) 11 { 12 long long a,b; 13 scanf("%lld%lld",&a,&b); 14 printf("%lld\n",a*(a+1)/2*b*(b+1)/2); 15 16 } 17 return 0; 18 }
Problem Description
给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格.


Input
第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100).
Output
每行输出网格中有多少个矩形.
Sample Input
2
1 2
2 4
Sample Output
3
30