我只想说一下,最后为什么输出int(r1000),而不是int(l1000),我看了其他那么多题解也没把我说服,这里说一下我的理解。
当我们用实数二分求一个值的时候,这个值会趋近于答案,比如答案是6500,而l等于6499.99999,r等于6500.00001,随着精度的提高,这两边会越来越趋近于6500,这就是实数二分的特点。
因为它趋近于6500,所以我们知道其实答案就是6500,而答案6500向下取整就是6500,所以我们必须用r向下取整来得到答案(因为r比答案要大一点点)。
同理,如果题目要求最终答案向上取整,就必须用l向上取整来得到最终答案(因为l比答案小一点点)。
对于本题,最终的
l
和r
会有如下两种情况(二分的性质:l和r趋向正确结果,但总有一些差距):所以为了对所有样例都是正确的,就需要对
r
下取整但是如果l=6499.99999,r=6500.00001,理论答案是6499.999999999,那根据问题背景,实际答案最多取6499,r下取整就不对了?
确实,感觉题目确实有点问题的,只是对于这些测试用例,r*1000正好能过而已
确实,题目里这个下取整是对真实结果的下取整,然而l比真实结果小,r比真实结果大,要符合题意得话应该要向中间取整,也就是大佬所说的l上取整,r下取整
懂惹!谢谢
使用整数二分解决一切问题
感谢我说怎么一直过不了!
可以!说的很对我感觉,,我还是没彻底理解二分,想了很久