题目大意
冒险者在一条 xxx 轴上,并处于点 000,假设当前的位置是 yyy ,现在正在进行第 kkk 次跳跃,有两种跳跃的方案
* 向前跳跃到 y+ky+ky+k
* 向后跳跃到 y−1y-1y−1
冒险者要到达点 xxx 点
题意分析
问最少跳跃几次,冒险者就能到达 xxx 点
解题思路
由于一开始冒险者一定是在点 000 的,并且 xxx 点一定是大于 000 的,很容易看出一开始只要一直执行 【方案一】 即 y+ky+ky+k 就一定能到达 ≥x\ge x≥x 的位置。
如果执行了 kkk 次后正好能到达 xxx 点那么答案为 kkk
那如果超过了 xxx 点呢? 这个时候我们需要考虑用 【方案二】 来进行干预了。
接下来我们分类讨论一下:
* 进行kkk次操作后,到达了 x+1x+1x+1 的位置,那么我们只需要执行一次 【方案二】
* 进行kkk次操作后,到达了 x+px+px+p 的位置,其中 ppp (p>1)(p\gt 1)(p>1) 为超出 xxx 的部分
这个时候可以有两种办法消除这个 ppp。
第一种选择执行 ppp 次 【方案二】
第二种选择在之前跳跃的某次 【方案一】 将它改为 【方案二】
显然这里选择 【方案二】 是最优的
所以我们只需要关心,经历几次 kkk 能跳到 ≥x\ge x≥x 的点上就行了,这里可以使用二分去快速找到 kkk
时间复杂度解析
对于每个 xxx 都需要进行一次二分即复杂度为:O(log2n)O(\log_{2} n)O(log2 n)
代码演示