Suspicious logarithms

这道题目告诉我们,数学题能列式子的,化简的,一定要耐心做,最后就能看出来了

先阐述一下主要思路

很显然y是可以通过按位确定的,所以我们枚举y,那么当前考虑的数的范围就是[2y,2y+11]

我们来求解z

yzx,同时取log有zlog2xlog2y,由于z是整数,所以有z=log2xlog2y,我们考虑[2y,2y+11]中每一个数的z,即考虑[log22ylog2y,log22y+11log2y],这个区间写成开区间(这里写成开区间是为了右端点好计算,但实际上右端点是有可能可以取到的)就是[log22ylog2y,log22y+1log2y),即[ylog2y,y+1log2y)

推到这里我在考场的时候认为两端就相等了,z只有唯一的取值。实际上不是的,完全有可能ylog2y比一个整数N小一点点,y+1log2yN大一点点,所以两者是可以相差1的(注意也最多相差一,对于y2来说,1log2y的增量不会超过1

然后我们开始写代码,我居然直接用log2函数。。这个东西的类型是double的,有效数字为17~18位,而1018是会炸的。。。

那怎么办?我居然还想到每一次用一个循环的手写pow函数去跑,果然超时了。。。

中途还用了二分去寻找那个分界点,属于是唐完了,TLE

实际上分界点是好确定的,我们设log2plog2y=ylog2y,p=yylog2y,由于最多相差1,那么分界点就是p×y了。。。直接变O(1)(当然最开始也可以设log2plog2y=y+1log2y,直接解出分界点)

循环的pow函数也可以预处理(如何计算ylog2y?设xylog2y,即yx2y,循环x即可)

CF提交的若干次代码都看一看吧,这种错误真不能犯了

实在不会推到的话就打表

posted @   最爱丁珰  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示