题目传送门:点击打开链接
矩形A + B
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7698 Accepted Submission(s): 5853
Problem Description
给你一个高为n ,宽为m列的网格,计算出这个网格中有多少个矩形,下图为高为2,宽为4的网格.
![](https://i-blog.csdnimg.cn/blog_migrate/30eb0263b48b7de077ccf5a73574b88d.jpeg)
Input
第一行输入一个t, 表示有t组数据,然后每行输入n,m,分别表示网格的高和宽 ( n < 100 , m < 100).
Output
每行输出网格中有多少个矩形.
Sample Input
2 1 2 2 4
Sample Output
3 30
Source
这题可以当做规律来记(PS.比赛的时候交了N遍都wa 赛后在HDU交了一发一样的就AC了。。。。有毒。。。mmp)
规律
如果矩形长为1个网格:
一共有4种可能
如果矩形长为2个网格:(要相邻,下同)
一共有3种可能
如果矩形长为3个网格:
一共有2种可能
如果矩形长为4个网格:
一共有4种可能
一共有4+3+2+1=10种可能
同理宽有2+1=3种可能
所以一共有30个矩形
如果是n行m列
就是(n+n-1+n-2+...+1)*(m+m-1+m-2+...+1)
#include<iostream>
#include<cstdio>
using namespace std;
int n,m;
int num[100];
int main()
{
num[0]=0;
for(int i=1;i<=100;i++)
{
num[i]=num[i-1]+i;
}
int t;
cin>>t;
while(t--)
{
scanf("%d %d",&n,&m);
printf("%d\n",num[n]*num[m]);
}
}