我的思路是这样:
总体的图形数量(正方形+长方形)为: 21n(n+1)×21m(m+1)
然后求出正方形的个数就行
先把边长为1的加上,即初始值为 n×m
然后从2遍历,就是 for(int i=2;i<min(n,m);i++)
然后可以知道在m这一行边长为i的有 m−i+1
同理,在n这一行边长为i的有 n−i+1
故边长为i的正方形有:(m−i+1)(n−i+1) 个
这样顺次相加,就可以写出代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int all=0.5*n*(n+1)*0.5*m*(m+1);
int sq=m*n;
for (int i=2;i<=min(m,n);i++){
sq+=(n-i+1)*(m-i+1);
}
cout << sq<<" "<<all-sq<<endl;
return 0;
}
结果就得了40pnt,十分惨烈
求大佬指点qwq