P2241题解
看题解里没有
公式推导
(画的有些丑,请管理多多包涵一下 QAQ)
注:点数
长方形个数
我们可以这么想,长方形的长的起始点是
也就是说,
同理,
根据乘法原理,长方形个数(包括正方形为):
正方形个数
考虑每个正方形边长,直至边长为
- 边长为
1 :个数=n \times m 。 - 边长为
2 :个数=(n - 1) \times (m - 1) 。 - 边长为
3 :个数=(n - 2) \times (m - 2) 。
- 边长为
m :个数=(n - m + 1) \times 1 。
总个数
该式子可化简为:
具体推导过程十分繁琐,具体推导过程请参考这里。
我们注意到,题目里所问的长方形不包括正方形,所以我们需要用长方形个数减去正方形个数。
代码:
#include <bits/stdc++.h>
using namespace std;
long long n,m; //注意:这题需要开 long long
int main(){
cin >> n >> m;
if(n < m) swap(n,m);
long long changfangxing = ((n) * (n + 1) / 2) * (m * (m + 1) / 2);
long long zhengfangxing = (m) * (m + 1) * (2 * n + (n - m + 1)) / 6;
cout << zhengfangxing << " " << changfangxing - zhengfangxing;
return 0;
}