nyoj-206矩形的个数

矩形的个数

描述
在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形。

给出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进行输入输出也是一种选择




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值