1 条题解

  • 0
    @ 2025-8-24 22:30:40

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar bzy
    魔法みたいな算法で☆世界を変えるよ

    搬运于2025-08-24 22:30:40,当前版本为作者最后更新于2021-04-14 13:44:34,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    Tips : 本解法不一定是正解。

    考虑暴力,枚举 aka_k, 将 {an}\{a_n\} 中除了 aka_k 的数字对 aka_k 取模,生成新序列 {bn}\{b_n\}。将 {bn}\{b_n\} 中的数字分成两部分 A,BA, BAA 中元素小于 n2\lceil\frac{n}{2}\rceil, BB 中元素大于等于 n2\lceil\frac{n}{2}\rceil。然后考虑模 aka_k 意义下,最大值三种可能的情况:

    1. AA 中最大值与次大值的和。
    2. BB 中最大值与次大值的和减去 aka_k
    3. 枚举 bib_i 找到 {bn}\{b_n\} 小于 akbia_k-b_i 的最大值 bxb_xbi+bxb_i+b_x 可能为最大值。

    视实现情况,复杂度为 Θ(n2logn)\Theta(n^2\log n) ~ Θ(n3)\Theta(n^3)

    考虑对上述暴力进行优化。

    优化一

    相同出现过的数字只枚举一次。

    看起来用处不大,复杂度依然不变。

    优化二

    从大到小枚举 aka_k, 然后记录一个答案 pp。一旦 akpa_k \le p 则不再枚举。

    看起来用处不大,但结合优化一以后,复杂度下降到 O(nlognlogV)\mathcal{O}(n\log n\log V)。其中 VV{an}\{a_n\} 的值域大小。

    这里的复杂度是一个比较松的上界,应该能找到更紧的界。

    以下是这个上界的证明。

    证明

    考虑弱化上述的优化,即把记录的答案 pp 改成暴力中情况 1、2 的最大值,记作 p=max{p1,p2}p=\max\{p_1,p_2\}

    首先枚举 {an}\{a_n\} 中最大值为 aka_k,记作 axa_x

    延续暴力算法中的定义,有 AA 中所有元素均小于等于 p1p_1, 所以小于等于 pp。即 AA 中元素无需枚举。所以只考虑 BB 中元素。

    设 $\lceil\frac{a_x}{2}\rceil\le B_1\le B_2\le \cdots\le B_t\le a_x$。

    假设枚举若干轮后 pp 变为 pp'。则我们需要枚举的元素为

    pBsBs+1Btaxp'\le B_s\le B_{s+1}\le \cdots\le B_t\le a_x

    将上述不等式逐项相减得到 {u1,u2,,uts+1}\{u_1,u_2,\cdots,u_{t-s+1}\}

    因为第二类最大值为 Bi+Bi+1Bi+2pB_i+B_{i+1}-B_{i+2}\le p'

    所以 ui+2ui+1j=1i+1uju_i+2u_{i+1}\ge\sum\limits_{j=1}^{i+1}u_j

    要让 uu 尽可能小,上述不等式得取等号。

    ui+1=j=1i1uju_{i+1}=\sum\limits_{j=1}^{i-1}u_j

    此时可知 ui+1=ui+ui1u_{i+1}=u_i+u_{i-1} 形似斐波那契数列,所以 un=O((5+12)n)u_n=\mathcal{O}((\frac{\sqrt{5}+1}{2})^n)

    又因为 $B_t-p'=\sum\limits_{i=1}^{t-s+1} u = u_{t-s+2}\le\frac{V}{2}$。

    所以需要枚举的数是 O(logV)\mathcal{O}(\log V) 级的。

    总时间复杂度为 O(nlognlogV)\mathcal{O}(n\log n \log V)

    • 1

    信息

    ID
    6686
    时间
    1000ms
    内存
    512MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者