题目链接:棋盘问题
这道题水不水呢?还是很水的,为什么?因为数据太小了。直接算就行了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
scanf("%d%d",&n,&m);
int sum1=0; //1
for(int i=1;i<=min(n,m);i++){
sum1+=(n-i+1)*(m-i+1); //2
}
printf("%d ",sum1);
int sum2=0; //3
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum2+=(n-i+1)*(m-j+1); //4
}
}
printf("%d",sum2-sum1); //5
return 0;
}
1处:sum1存储正方形个数
2处:计算正方形个数,枚举每一个可能的边长,知道n和m中较小的那一个。
3处:储存长方形和正方形的总个数。
4处:计算长方形的个数
5处:注意减去正方形的个数。
有的同学可能会说这个太麻烦了,其实也是,但更高级的算法,我将放在另一道题中讲,详见统计方形。