【发布时间】:2011-08-24 23:51:28
【问题描述】:
玛丽的生日得到了一个魔法球。球,当从 某个高度,反弹到这个高度的两倍。玛丽扔了 来自她阳台上的球,在地面以上
x。帮助她 计算球需要反弹多少次才能到达 身高w.输入:一个整数
z(1 ≤ z ≤ 106) 作为测试用例的数量。为了 每个测试,整数x和w(1 ≤ x ≤ 109, 0 ≤ w ≤ 109)。输出:对于每种情况,一个整数等于反弹次数 需要打印球到达
w。
好的,所以,虽然它看起来非常简单,但我找不到比简单、愚蠢、残酷的循环方法更有效的方法来解决它,即循环将 x 乘以 2 直到它至少为 w。当然,对于最大的测试,这将是一个可怕的时间。然后,我想使用以前的案例,这样可以节省很多时间,前提是我们可以在短时间内从以前的案例中获得最接近但更小的结果(O(1)?),但是,我不能(并且不要'不知道是否有可能..)实施。这应该怎么做?
【问题讨论】:
-
不妨试试对数。
-
你听说过logarithms吗? (但由于在给定的限制下,跳出的次数最多为 30 次,因此朴素算法并没有什么“可怕”的地方)。
-
当然你只需要使用对数。 e: 太慢了
-
@Hammerite,我花了一些时间才明白你的意思并不是说 natural 对数会太慢 :-)
-
@Kerrek Have you tried logarithms?