【算法分析】
1.计算正方形的个数s1
边长为1的正方形个数为nm
边长为2的正方形个数为(n-1)(m-1)
边长为3的正方形个数为(n-2)(m-2)
…………
边长为min{n,m}的正方形个数为(m-min{n,m}+1)(n-min{n,m}+1)
根据加法原理得出
2.长方形和正方形的个数之和s
宽为1的长方形和正方形有m个,宽为2的长方形和正方形有m-1个,┉┉,宽为m的长方形和正方形有1个;
长为1的长方形和正方形有n个,长为2的长方形和正方形有n-1个,┉┉,长为n的长方形和正方形有1个;
根据乘法原理
3.长宽不等的长方形个数s2
显然,s2=s-s1
#include<bits/stdc++.h>
#define rep(i, a, b) for(int i = a; i <= b; ++i)
using namespace std;
int main() {
int n, m;
scanf("%d%d", &n, &m);
int tot = (1 + n) * n * (1 + m) * m / 4;
int square = 0;
rep(i , 0, min(n, m)) {
square += (n - i) * (m - i);
}
printf("%d %d\n", square, tot - square);
return 0;
}
https://www.cnblogs.com/qilinart/articles/4995707.html