深基第10章暴力枚举:P2241 统计方形(数据加强版)

· · 题解

P2241 统计方形(数据加强版)

//P2241 统计方形(数据加强版)
#include <bits/stdc++.h>
using namespace std;
long long rect=0,squ=0,test;//定义矩形和正方形的数量 
int main(){
    long long n,m;//一定要定义为长整型,不然计算 n*(n+1)*m*(m+1)/4时会出错 
    cin>>n>>m;
    for (int i=1;i<=min(n,m);i++){//从1到较短的边长数循环一遍 
        squ+=(n-i+1)*(m-i+1);
        //行和列上边长为i的数量是n-i+1个和m-i+1个,根据排列组合可算出边长为i的正方形共有(n-i+1)*(m-i+1) 个 
    }
    rect=n*(n+1)*m*(m+1)/4-squ;//长方形个数=所有矩形的个数-正方形的个数
    cout<<squ<<" "<<rect<<endl;
    //printf("%lld %lld\n",squ,rect);
    return 0;
}