南陽テーマ206-長方形の個数

1413 ワード

矩形の個数
時間制限:
1000 ms|メモリ制限:
65535 KB
難易度:
1
説明
1つの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まで処理しなければなりません.
整数A,B(1<=A,B<=1000)を2個入力
しゅつりょく
見つかった長方形の数を出力します.
サンプル入力
1 2
3 2

サンプル出力
3
18


ソース
この问题は计算の公式を探し当てて、多くのブログを见てすべて直接与える公式で、ここで私は详しく说明します
m*n
A
B
 
 
C
 
 
 
D
 
 
 
E
 
 
 
 
 
 
 
 
 
 
 
矩形の1つの頂点をA(各格子のアルファベットがこの格子の左上隅の定点を表す)にとると、その構成する矩形の対角のもう1つの定点はAの行と列の他の任意の頂点を除いて全部で(n)個でなければならない.
矩形の1つの頂点をA(各格子のアルファベットがこの格子の左上隅の定点を表す)にとると、その構成する矩形の対角のもう1つの定点はAの行と列の他の任意の頂点を除いて合計(n-1)個でなければならない.
.
.
.
1行目まで取った最後の格子の左上隅には(1+2+3+・・n)個の矩形があります
そして2行目のB,C,D,Eをmまで繰り返しても1行目の場合と同じ(1+2+3+......m)
だから全部の個数は(1+2+3+4+・・+m)*(1+2+3+4+・・n)
式の合計個数はm*n*(m+1)*(n+1)/4となる
しかしデータが大きいので注意してlong long型(_int 64ではサポートされていませんが、waは1回しました)
#include
#include
#include
using namespace std;
int main()
{
	long long a,b,c,d,m,n,i;
	while(scanf("%lld%lld",&m,&n)!=EOF)
	{
		printf("%lld
",m*n*(m+1)*(n+1)/4); } return 0; }