1 条题解

  • 0
    @ 2026-9-9 9:19:17

    题解

    思路

    把目标最大公约数改写为候选整数 xx:只要能把每个 AiA_i 增加到不小于它的最小 xx 的倍数,就能让最终最大公约数被 xx 整除。

    做法

    所需操作数为 $\operatorname{cost}(x)=\sum_i(\lceil A_i/x\rceil x-A_i)$。设 V=max⁡AiV=\max A_i。当 x>Vx>V 时所有数都只能增加到 xx,所以这部分的最优候选为 ⌊(∑Ai+K)/N⌋\left\lfloor(\sum A_i+K)/N\right\rfloor,且只需在它大于 VV 时计入答案。

    对 1≤x≤V1\le x\le V,按区间 ((q−1)x,qx]((q-1)x,qx] 汇总序列元素:区间内元素需要增加的总量是 qx⋅c−sqx\cdot c-s,其中 cc 和 ss 分别是元素个数与元素和。预处理值域上的计数前缀和与数值和前缀和后,每个区间可在 O(1)O(1) 时间计算;枚举所有 xx 的区间总数是调和级数规模。若 cost⁡(x)≤K\operatorname{cost}(x)\le K 就用 xx 更新答案。

    复杂度

    总时间复杂度为 O(N+Vlog⁡V)O(N+V\log V),空间复杂度为 O(V)O(V),所有和与费用均需使用 64 位整数。

    • 1

    信息

    ID
    1651
    时间
    2000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者