2 条题解

  • 6
    @ 2026-9-30 16:28:50

    最大公约数2(gcd)

    一个环,第 ii 个数字为 aia_i,求对于 k=1∼nk=1\sim n ,求将环分为 kk 端后,每一段数字和的 gcd⁡\gcd 的最大值。

    n≤2000,ai≤5×107n\le 2000,a_i\le 5\times 10^7 。

    首先看到 gcd⁡\gcd 和 max⁡\max ,我们应该立马想到:枚举 gcd⁡=g\gcd=g。

    那么此时,对于一个 kk,问题就变为了是否存在一种划分使得每一段都为 gg 的倍数。

    接下来,显然的,考虑前缀和。设 si=∑j=1iajs_i=\sum_{j=1}^ia_j ,那么一段 [i+1,j][i+1,j] 的和为 gg 的倍数,就变为 si≡sj(modg)s_i\equiv s_j\pmod g 了。然后,由于是环,问题转变为是否存在 kk 个数,使得他们的 ss 模 gg 同余。

    这个问题如果直接枚举 gg ,可以做到复杂度 O(n∑ai)\mathcal{O}(n\sum a_i) ,可以获得 50%50\% 的分数。

    然后,一个关键观察: g∣sng\mid s_n 。

    这样,我们只需要枚举 sns_n 的因数即可。由于 sn≤1011,d(sn)≤5×103s_n\le 10^{11},d(s_n)\le 5\times 10^3,这样我们只需要枚举 5×1035\times 10^3 个 gg 就行。复杂度 O(nd(sn))\mathcal{O}(nd(s_n))。

    • @ 2026-10-1 10:44:24

      缺少关键环节:

      如果对于一个 gg 存在 kk 段的切分,那么也一定存在 <k<k 段的切分。所以转化为对于给定的 gg 求一个最大的 kk,然后统计后缀最大值。

  • 0
    @ 2026-10-1 15:18:40

    思路:

    这个是OJ的新功能

    code不给

    • 1

    信息

    ID
    2777
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    (无)
    递交数
    33
    已通过
    8
    上传者