1 条题解

  • 0
    @ 2026-9-3 10:45:14

    题解

    思路

    对一个可能成为前缀最大公约数的整数 dd,统计数组中有多少元素是 dd 的倍数。最优排列可以看成沿“当前最大公约数”不断下降;从 dd 进入更大的倍数状态时,应先放置仍属于该倍数的元素。

    做法

    令 cdc_d 为数组中能被 dd 整除的元素个数,令 fdf_d 表示只考虑这些元素、最终前缀最大公约数降到 dd 时的最大贡献。

    不继续细分时,贡献为 d⋅cdd\cdot c_d。若先处理能被 dpdp 整除的元素,其中 pp 是质数,则这部分得到 fdpf_{dp},剩余 cd−cdpc_d-c_{dp} 个元素各贡献 dd:

    $$f_d=\max\left(d c_d,\max_{p\text{ 为质数},\,dp\le A}\left(f_{dp}+d(c_d-c_{dp})\right)\right).$$

    只需考虑质数倍数:任何合数倍数都可沿质因子逐步到达。按 dd 递减计算,答案为 f1f_1。cdc_d 通过枚举 dd 的所有倍数求得。

    子任务一枚举全部排列并计算前缀最大公约数和。子任务二中所有值形成整除链,按数值降序放置后每个新元素就是当前最大公约数,答案等于所有元素之和。

    复杂度

    设 A=max⁡aiA=\max a_i。计数总复杂度为 O(Alog⁡A)O(A\log A),质数转移为 O(Alog⁡log⁡A)O(A\log\log A);空间复杂度为 O(A)O(A)。

    • 1

    信息

    ID
    1303
    时间
    5000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者