统计方形 (暴力枚举)

题解:
其实这题需要一些数学思路
首先我们来看正方形,只需要将方格放在一个以左上角为(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; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号