统计方形 (暴力枚举)

题解:

其实这题需要一些数学思路

首先我们来看正方形,只需要将方格放在一个以左上角为(0,0)的坐标系中,固定每个方格的右下角,那么很显然以这个方格延伸出来的正方形就是横竖坐标的最小值,其实这些坐标代表着他们的边线个数

然后我们来看长方形,长方形直接去求会很难,所以我们转换思路,矩形-正方形 = 长方形,因此我们只要求出矩形就好,一个方格延伸出的矩形个数是下面边线个数和右面边线个数的乘积

然后用上面的思路,将每一个点的数量枚举出来,依次相加,就有了如下代码

#include<iostream>
using namespace std;

int main(void)
{
    long long  n, m;
    long long Z = 0, J = 0;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            Z += min(i, j);
            J += i * j;
        }
    }
    cout << Z << " " << J - Z << endl;
    return 0;
}

 

posted @ 2021-01-14 15:32  loliconsk  阅读(156)  评论(0)    收藏  举报