CF1995C Squaring 题解

思路详解:

请注意,本题解用到了非整数计算,也就是说性能可能不如整数运算,但是易于实现,追求最优解的大佬不建议观看本题解。


这个题看似简单,但是由于涉及到了平方操作,不用高精度根本存不下,然后如果你要用高精度的话又会 TLETLETLE 而且巨难写。

尝试使用对数科技,根据高中数学的知识我们可以知道 log⁡(n∗n)=2×log⁡n\log(n* n) = 2 \times \log nlog(nn)=2×logn,但是注意到 n≤2×105n \le 2 \times 10^5n2×105,所以就算将平方操作转化成了 ×2\times 2×2 操作仍然无法通过本题。

然后做这道题的时候笔者想到这里就觉得这道题不可做,然后果断放弃了。。

但事实上,对数科技并不是只能使用一次,我们可以通过对数的转化将 ×2\times 2×2 转化成 +2+ 2+2,即 log⁡(n×2)=log⁡n+log⁡2\log (n \times 2) = \log n + \log 2log(n×2)=logn+log2,因此,我们就根据上述两个等式成功将平方操作转化成了 +2+ 2+2​ 操作。

然后就做完了。

tip: 由于使用了非整数的运算,所以判断是否等于 0 的时候建议和 eps 作比较,防止出现精度上的问题,即出现了误差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值