题目描述
有一个 n × m n \times m n×m 方格的棋盘,求其方格包含多少正方形、长方形(不包含正方形)。
输入格式
一行,两个正整数 n , m n,m n,m( n ≤ 5000 , m ≤ 5000 n \leq 5000,m \leq 5000 n≤5000,m≤5000)。
输出格式
一行,两个正整数,分别表示方格包含多少正方形、长方形(不包含正方形)。
样例 #1
样例输入 #1
2 3
样例输出 #1
8 10
正方形数目求法:
依次求边长为i的正方形数量
int k = n > m ? m : n;
for (int i = 1; i <= k; i++)
res += (m + 1 - i) * (n + 1 - i);
长方形数目求法:
先求矩形数目,然后减去正方形数目
矩形数目:(m+1)*m/2与(n+1)*n/2相乘
(m + 1) * m * (n + 1) * n / 4 - res
AC代码:
#include <iostream>
#include <iostream>
using namespace std;
long long n, m,res;
int main()
{
cin >> n >> m;
int k = n > m ? m : n;
for (int i = 1; i <= k; i++)
res += (m + 1 - i) * (n + 1 - i);
cout << res << ' ' << (m + 1) * m * (n + 1) * n / 4 - res << endl;
}
记得开LL,不然数据会爆