洛谷:P2241:统计方形


洛谷:P2241:统计方形

题目

P2241:统计方形

分析

如果我们一个一个的去遍历,一定会超时的,因为复杂度是\(O(n^2\cdot m^2\))。

正方形

正方形比较特别,但它也是一个“矩形”。我们先统计正方形的数量。

对于一个\(n\cdot m\)的矩形来说,它的边长可以是1min(n, m)。而对于每个边长为i的正方形,横向可以选择的点有\(m-i-1\)个,纵向可以选择的点有\(n-i-1\)个。所以对于边长为i的正方形,它的总数很快可以得到:\((m-i-1)\times (n-i-1)\)。当然,总的正方形数量是各个边长的数量的累加:\(\sum_{i=1}^{min(n, m)} (m-i-1)\times (n-i-1)\)

矩形

矩形的高度是[1, n],同样,对于某个特定高度h的矩形,纵向可以选择的起点数为\(n-h+1\)。所以,所有高度的纵向起点数总和为:\(\sum_{h=1}^n (n - h + 1) = \sum_{h=1}^n h = \frac{n \times (n + 1)}{2}\)。同理可得,所有宽度(w)的横向起点总和为:\(\sum_{w=1}^m (m - w + 1) = \sum_{w=1}^m w = \frac{m \times (m + 1)}{2}\)

按照乘法原理,得到不同长宽的矩形总数有\(\left( \frac{n \times (n + 1)}{2} \right) \times \left( \frac{m \times (m + 1)}{2} \right)\)个。

但是,这个公式中,每个点都被用到了四次:作为左上、右上、左下、右下角都用了一次。所以,这个结果要除以4。而且,这个总和包括正方形的数量,所以要去掉正方形才是狭义上的矩形数量。

答案

Solution

思考

就算是暴力算法,也是有方法的,可谓“暴力美学”!

上一篇 下一篇