P2241 统计方形(数据加强版)暴力枚举!真的太暴力了(Java)

题目链接:

P2241 统计方形(数据加强版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

一开始看这道题的时候,赶紧看上去挺简单的,但是,自己一做,哎~这正方形(长方形)怎么用代码找啊,人很容易看出什么样的是正方形,什么样的是长方形,但是,要让计算机去找,它咋找啊,它不认识图形啊,这是问题之一。我们动手数很简单,从大到小,哎~?计算机怎么去数?for循环只有数字下标啊,如何把下标转化成有几个方形呢?这是问题之二。

其实这道题的关键就在于,如何把下标转化为“方形”。因为这题明显是要用两个for循环先模拟一个n*m的矩阵,然后每个点位(i, j)对应的是数字下标,通过矩阵中的数字下标,去计算出有多少个方形。最直接能想到的是:

当 i == j 时,是正方形

当 i != j 时,是长方形 

 但是仔细一想,不对啊,循环里的i和j是下标,不是方形的长宽啊,只有长==宽的是正方形,  长!=宽的是长方形啊。正因如此,所以比较的时候,不是直接比较i和j,而是需要定好一个起点位置(i, j),去然后用另外一对点(k, l),去移动,然后用k-i计算宽度,用l-j计算长度,然后通过上面的规则去比较。这样,就引出了下面的“最暴力解法”。

1. 最暴力解法:

为什么说最呢,显然,通过上面的分析,应该是需要4层循环的,时间复杂度是惊人的O((n*m)^2)。但是,你别说,在IO赛制下,也能拿到点分,嘻嘻。下面是代码。

代码:

import

你可能感兴趣的:(竞赛刷题,java,洛谷,算法)