杭电2524 矩形A + B

来源:互联网 发布:ida pro 7.0 mac 编辑:程序博客网 时间:2024/06/06 21:02
Problem Description
给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格.
 

Input
第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100).
 

Output
每行输出网格中有多少个矩形.
 

Sample Input
21 22 4
 

Sample Output
330

题意简单粗暴.

思路很显然.怎样才能构成矩形呢,只需要看对角线的连个点 这两个只要不在同一行,不在同一列,那么这两个点就可以看做是一个矩形,那么有多少对这样的点呢?

咱们可以看有两行的话竖着就有三个点,有四拍的话横着就有5个点,那么有n行的话竖着有n+1个,m列的话横着就有m+1个点,共有(n+1)*(m+1)个。再看一个点怎么找到另一个跟他不在同一行不在同一列的点呢,取个极限把这个点取到大矩形的定点,那么就相当于有n*m个跟他不同行不同列.所以可以构成(n+1)*(m+1)*m*n个矩形 但是 有四个是重合的 就是 小矩形的左上和右下看成了两个 左下和右上也看成了两个 所以最后 除以4 就行了.

#include<stdio.h> __int64 i,n,j,k,l; int main() { scanf("%I64d",&k); while(k--) scanf("%I64d%I64d",&n,&l); printf("%I64d\n",(n+1)*(l+1)*n*l/4); } return 0; }

0 0
原创粉丝点击