hdu 2524矩形A + B(训练思维的好题)

博客讲述了一道ACM水题的解题过程。作者起初想通过实例找关系但因情况多而无解,后意识到不应局限于繁杂实例。给出解题思路,对于m行n列,先算出一行有n×(n + 1)/2个矩形,再将行缩成单元矩形,一列有m×(m + 1)/2个,结果为两者相乘。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

也许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

转载于:https://www.cnblogs.com/heat-man/archive/2013/05/04/3059940.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值