棋盘问题


关于(n,m)找正方形长方形问题
正方形
边长为1的正方形个数为n*m
边长为2的正方形个数为(n-1)*(m-1)
边长为3的正方形为个数(n-2)*(m-2)
边长为min(n,m)的正方形为个数s1=(n-min(n,m)+1)*(m-min(n,m)+1)
然后从边长为1到min(m,m)的正方形个数全部加起来;
长方形
由于正方形是特殊的长方形
总数s2=((1+n)*(1+m)*n*m)/4-正方形的个数(该题只考虑非正方形的长方形)
即
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m,s1=0,s2;
cin>>n>>m;
s2=((m+1)*(n+1)*m*n)/4;
for(;m>=1&&n>=1;m--,n--)
s1+=m*n;
cout<<s1<<" "<<s2-s1;
return 0;
}

浙公网安备 33010602011771号