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赛制下,也能拿到点分,嘻嘻。下面是代码。

代码:

impor
  • 43
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值