LeetCode 第52场双周赛总结

这篇博客回顾了LeetCode第52场双周赛,重点讨论了模拟和数学问题的解决策略。博主分享了对于向下取整数对和问题的解题思路,包括先排序、枚举除数和商,以及使用二分分块和前缀和优化算法,提高了求解效率。官方题解也采用了类似的方法,通过枚举和统计符合条件的元素个数来求解。

LeetCode 第52场双周赛总结

前往竞赛

前三题没什么好说的都是模拟。

向下取整数对和

LeetCode 5212

说一下我的思路:先对数组进行排序,依次枚举除数 y y y,然后枚举商 d d d,对整个数组进行二分分块,统计符合条件的$x的数量即可。

官方题解:

C C C为数组中的最大值,同样枚举 y y y d d d y y y枚举 [ 1 , C ] [1,C] [1,C] d d d枚举 [ 1 , ⌊ C y ⌋ ] [1,\lfloor \frac{C}{y} \rfloor] [1,yC],之后,我们统计符合条件的 x x x的个数,记 c n t [ x ] cnt[x] cnt[x]为元素 x x x出现的个数,那么满足条件的 x x x的个数为:

∑ x = d y min ⁡ { C , ( d + 1 ) y − 1 } c n t [ x ] \sum_{x = dy}^{\min\{C,(d+1)y-1\}} cnt[x] x=dymin{C,(d+1)y1}cnt[x]

其中对 c n t [ x ] cnt[x] cnt[x]求和是连续的,因此我们可以用 p s u m [ x ] psum[x] psum[x]表示 c n t [ x ] cnt[x] cnt[x]的前缀和进行优化。

因此,该式就变成了:

p s u m [ min ⁡ { C , ( d + 1 ) y − 1 } ] − p s u m [ d y − 1 ] psum[\min\{C,(d+1)y-1\}] - psum[dy - 1] psum[min{C,(d+1)y1}]psum[dy1]

然后乘以 d ∗ c n t [ y ] d * cnt[y] dcnt[y]即可 。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值