矩形的个数
描述
在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形。
给出A,B,计算可以从中找到多少个矩形。
给出A,B,计算可以从中找到多少个矩形。
-
输入
-
本题有多组输入数据(<10000),你必须处理到EOF为止
输入2个整数A,B(1<=A,B<=1000)
输出
-
输出找到的矩形数。
样例输入
-
1 2 3 2
样例输出
-
3 18
代码:
思路解析:#include<stdio.h> #include<iostream> using namespace std; int main() { int n,m; long long a[1005]; while(scanf("%d%d",&n,&m)!=EOF){ long long sum=0; long long b=m*(m+1)/2; for(int i=1,j=n;i<n+1&&j>0;i++,j--){ a[i]=b*j; sum=sum+a[i]; } printf("%lld\n",sum); } return 0; }
这是一道纯粹数学题(找规律)如果第一行有1个矩形,可有1个矩形;如果第一行有2个矩形,可有3个矩形;
如果第一行有3个矩形,可有6个矩形;
.........如果第一行有n个矩形,可有n*(n+1)/2个矩形;
假设有一4*3的矩形,先是从第一行找1*(1~n)可有24个,即(4*6);第二行找1*(1~n)可有18个,即(3*6);
第三行找1*(1~n)可有12个,即(2*6);
第四行找1*(1~n)可有6个,即(1*6);一共可以找到60(=24+18+12+6)个,,,所以规律就出来了。。。这道题还有另外一个收获,就是long long和__int64的区别,在什么时候使用它们,与我们的编译器有关;有幸看到有人对此做的总结,与大家分享一下。。。那么对ACMer来说,最为关心的就是在各个OJ上交题应分别使用哪种方式了。其实方式只有有限的几种:
如果服务器是linux系统,那么定义用long long,IO用%lld
如果服务器是win系统,那么声明要针对编译器而定:
+ 如果用MS系列编译器,声明用__int64 [现在新版的Visual Studio也支持long long了]
+ 如果用MinGW环境,声明用long long
+ 无论什么编译器,IO一律%I64d下面把各大OJ情况列表如下:
1. TOJ : Linux系统
2. ZOJ : Linux系统
3. POJ : Win系统,语言如选择C/C++,则用MS编译器[支持两种声明],如选择GCC/G++,则为MinGW
4. UVa : Linux系统
5. Ural: Win系统,MS编译器[支持两种声明]
6. SPOJ: Linux系统
7. SGU : Win系统,MS编译器[支持两种声明]如果有不太清楚的情况可以先看看各OJ上的FAQ,通常会有说明。
另外,为了避免混乱,当数据量不大时,用cin, cout进行输入输出也是一种选择