s
本题,我们会用到一个求矩阵的公式 ,关于求正方形的个数,我们可以想向一下只有n=1,m=1的时候正方形为1,当n=2,m=2的时候小正方形增加4个,总共为5个,以此类推,我们可以发现s=1*1+2*2+......+min(n,m);可以自己去推理一下,同时我们要注意本题最后求出的结果较大,所以我们要用到long long形,连n,m也要注意用long long否则的话,与更广的表达式遇到之前可以会溢出,可以试一下。
代码:
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
ll n,m;
cin>>n>>m;
ll i;
ll z=0,c=0;
for(i=1;i<=min(n,m);i++){
z+=(n-i+1)*(m-i+1);
}
c=(n*(n+1)*m*(m+1))/4-z;//减去正方形的个数
cout<<z<<" "<<c;
}
上面的代码的下面的代码的简化版
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
ll n,m;
cin>>n>>m;
ll i,j;
ll z=0,c=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(i==j)
z+=(n-i+1)*(m-j+1);
else
c+=(n-i+1)*(m-j+1);
}
}
cout<<z<<" "<<c;
}