ppp

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

我们将头部到宝藏的距离,即 \(\lvert X_i-k_0\rvert\) \((1\leq i\leq N)\) 按照升序排序得到序列 \((Y_1,Y_2, \ldots, Y_N)\)
如果对于任意 \(1\leq i\leq N\),满足 \(Y_i\leq L_i\),则可以按照条件抓住宝藏。这意味着我们只需要用第 \(i\) 条胳膊抓住距离头部 \(Y_i\) 的宝藏即可。
另一方面,如果存在某个 \(1\leq i\leq N\),满足 \(Y_i>L_i\),则无法按照条件抓住宝藏。这是因为至少有 \((N-i+1)\) 个宝藏与头部的距离大于 \(L_i\),而我们最多只有 \((N-i)\) 条胳膊可以使用。

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

然而,头部位置的候选范围是 \(-2\times 10^{18}\leq x\leq 2\times 10^{18}\),对于所有可能的位置进行判定几乎是不可能的。因此,我们考虑在 \(x=k_0\)\(x=k_0+1\) 两种情况下,条件是否会发生变化。

  • \(x=k_0\) 时满足条件,但当 \(x=k_0+1\) 时不满足条件

在这种情况下,我们需要考虑 \(x=k_0\) 时满足条件的脚和宝藏的对应关系不能满足条件。换句话说,我们需要找到某个 \(1\leq i,j\leq N\),满足 \(k_0-L_j\leq X_i\leq k_0+L_j\) 且(\(X_i<k_0+1-L_j\)(必定成立) 或 \(k_0+1+L_j<X_i\))。这样的条件只能满足当且仅当 \(X_i=k_0-L_j\Rightarrow k_0=X_i+L_j\)。因此,这样的 \(k_0\) 最多只有 \(N^2\) 个。

  • \(x=k_0\) 时不满足条件,但当 \(x=k_0+1\) 时满足条件

在这种情况下,我们需要考虑 \(x=k_0+1\) 时满足条件的脚和宝藏的对应关系不能满足条件。换句话说,我们需要找到某个 \(1\leq i,j\leq N\),满足 \(k_0+1-L_j\leq X_i\leq k_0+1+L_j\) 且(\(X_i<k_0-L_j\)\(k_0+L_j<X_i\)(必定成立))。这样的条件只能满足当且仅当 \(X_i=k_0+1+L_j\Rightarrow k_0=X_i-L_j-1\)。因此,这样的 \(k_0\) 最多也只有 \(N^2\) 个。

因此,我们考虑集合 \(S=\{X_i+L_j|1\leq i,j\leq N \}\bigcup \{X_i-L_j-1|1\leq i,j\leq N \}\),其元素数量最多为 \(2N^2\)。将其按升序排序得到序列 \(S_1,S_2,\ldots,S_{|S|}\) \((S_1<S_2<\cdots<S_{|S|})\),则对于 \(2\leq i\leq |S|\),满足 \(x=S_i\) 的情况下是否满足问题描述中的条件与 \(S_{i-1}+1\leq x\leq S_i\) 的情况下是否满足条件是等价的(因为 \(S_i+1\) 恰好答案的是否的性质开始与之相同,直到 \(x=S_i+1\),出界了)。注意,对于 \(x\leq S_1\)\(S_{|S|}+1\leq x\) 的范围,由于头部位置足够远,绝对不满足问题描述中的条件。

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

code

posted @ 2023-09-03 19:50  wscqwq  阅读(4)  评论(0编辑  收藏  举报