Rescue Elizabeth

题目背景

事实上我严重怀疑没有人看过这部番(

题意

\(\tt{Elizabeth}\)\(\tt{Fraudrin}\) 附身的 \(\tt{Dreyfus}\) 抓到了数轴的 \(x\) 处,\(\tt{Meliodas}\) 从原点出发,去营救 \(\tt{Elizabeth}\)\(\tt{Meliodas}\) 的第 \(i\) 次移动可以向任意方向走 \(i\) 步,请帮他算出最少移动次数。

形式化题意:从数轴原点出发,第 \(i\) 次移动能走 \(i\) 个单位长度,求走到 \(x\) 点的最少移动次数。

题解

\(\tt{15pts}\) 做法:

观察到 \(1 \leq |x| \leq 10\),所以可以手动模拟 \(10\) 个答案(

\(\tt{40pts}\) 做法:

其实是给忘了开 long long 的正解的(
还有写法不优导致复杂度变成 \(O(x)\) 的正解的(

\(\tt{100pts}\) 做法:

首先是 \(O(\sqrt{x})\) 的做法:
因为无论 \(x\) 是正是负,答案都是一致的,也就是说答案具有正负等效性,为了方便处理,可以把 \(x\) 统一成正数。
运用一个贪心的思想:我们尽可能地往 \(x\) 点一直走,这样可以保证移动次数最小。到这里,我们可以考虑移动过程中只有一步往负方向走,其余步往正方向走。
我们可以枚举走的总路程到达一个点 \(y\),要满足 \(x \leq y\)\(y-x\) 是一个偶数。然后我们在 \(\frac{y-x}{2}\) 步往负方向走,因为这一步对正方向路程的贡献是 \(- \frac{y-x}{x}\),也就是说后面要填补这一步所减去的贡献,因此,最少移动次数就是走至 \(y\) 的这一步。
\(O(\log \sqrt{x})\) 做法:针对上述进行二分答案。
近似 \(O(1)\) 的做法(by zcy):
这里设 \(n\)\(i\)
根据代码,可知:

\[sum=\sum_{i=1}^{n}{i} \]

根据等差数列求和公式,可知:

\[\sum_{i=1}^{n}{i}=\frac{n(1+n)}{2} \]

所以:

\[sum=\frac{n(1+n)}{2} \]

移项可得:

\[2\times sum=n(n+1) \]

因为 \(sum\) 大于等于 \(x\) 就返回,所以可知:

\[\frac{n(n-1)}{2}\le x\le \frac{n(1+n)}{2} \]

所以:

\[n(n-1)\le 2\times x\le n(1+n) \]

开平方得:\(\lfloor \sqrt{2\times x}\rfloor=n-1\)\(\lfloor \sqrt{2\times x}\rfloor=n\)
然后据此求出 \(n\) 即可。

posted @ 2023-01-11 10:05  Akane_Moon  阅读(57)  评论(0)    收藏  举报

“一言(ヒトコト)