ppp

首先,我们考虑当头部位置为 x=k0 时,如何判断是否能够抓住 N 个宝藏满足问题描述中的条件。

我们将头部到宝藏的距离,即 |Xik0| (1iN) 按照升序排序得到序列 (Y1,Y2,,YN)
如果对于任意 1iN,满足 YiLi,则可以按照条件抓住宝藏。这意味着我们只需要用第 i 条胳膊抓住距离头部 Yi 的宝藏即可。
另一方面,如果存在某个 1iN,满足 Yi>Li,则无法按照条件抓住宝藏。这是因为至少有 (Ni+1) 个宝藏与头部的距离大于 Li,而我们最多只有 (Ni) 条胳膊可以使用。

对于排序 (Y1,Y2,,YN),我们可以使用快速排序等方法以 O(NlogN) 的时间复杂度进行比较,并采取比较左右相邻元素的方法在 O(N) 的时间内完成。因此,我们可以在 O(NlogN)O(N) 的时间复杂度内进行判定。

然而,头部位置的候选范围是 2×1018x2×1018,对于所有可能的位置进行判定几乎是不可能的。因此,我们考虑在 x=k0x=k0+1 两种情况下,条件是否会发生变化。

  • x=k0 时满足条件,但当 x=k0+1 时不满足条件

在这种情况下,我们需要考虑 x=k0 时满足条件的脚和宝藏的对应关系不能满足条件。换句话说,我们需要找到某个 1i,jN,满足 k0LjXik0+Lj 且(Xi<k0+1Lj(必定成立) 或 k0+1+Lj<Xi)。这样的条件只能满足当且仅当 Xi=k0Ljk0=Xi+Lj。因此,这样的 k0 最多只有 N2 个。

  • x=k0 时不满足条件,但当 x=k0+1 时满足条件

在这种情况下,我们需要考虑 x=k0+1 时满足条件的脚和宝藏的对应关系不能满足条件。换句话说,我们需要找到某个 1i,jN,满足 k0+1LjXik0+1+Lj 且(Xi<k0Ljk0+Lj<Xi(必定成立))。这样的条件只能满足当且仅当 Xi=k0+1+Ljk0=XiLj1。因此,这样的 k0 最多也只有 N2 个。

因此,我们考虑集合 S={Xi+Lj|1i,jN}{XiLj1|1i,jN},其元素数量最多为 2N2。将其按升序排序得到序列 S1,S2,,S|S| (S1<S2<<S|S|),则对于 2i|S|,满足 x=Si 的情况下是否满足问题描述中的条件与 Si1+1xSi 的情况下是否满足条件是等价的(因为 Si+1 恰好答案的是否的性质开始与之相同,直到 x=Si+1,出界了)。注意,对于 xS1S|S|+1x 的范围,由于头部位置足够远,绝对不满足问题描述中的条件。

因此,我们只需要判断 2i|S| 的情况下,x=Si 时是否满足问题描述中的条件,然后答案增加 SiSi1即可。
枚举和排序集合 S 的元素需要 O(N2logN) 的时间复杂度,对每个元素进行判定的总时间为 O(N3)(或 O(N3logN))。因此,我们可以以足够快的速度解决这个问题。

code

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17675457.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(9)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起