#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
/*注意下面的变量要用long long*/
long long zheng=0;
long long chang=0;
long ju=0;
cin>>n>>m;
for (int i=1;i<=n;i++){
for (int j=1;j<=m;j++){
zheng+=min(i,j);
ju+=i*j;
}
}
chang=ju-zheng;
cout<<zheng<<' '<<chang<<endl;
return 0;
}
对于这道题,我们先考虑第一个问题
一、算正方形的个数
1.如果我们固定了正方形的右上角(i,j),你能不能算出此时可能的正方形的个数?
2.显然,此时答案为Min(i,j).
3.所以可以枚举右上角,计算此时答案,求和即可。
二、算长方形个数
1.其实算长方形并不常见,但算矩形大家应该经常遇到,所以如果你会算矩形,再联系第一个问题,那答案就转化为 矩形个数-正方形个数.
2.像求解正方形个数一样,固定矩形右上角(i,j),显然此时矩形个数为i*j.
3.同理,求和即可.