1 条题解

  • 0
    @ 2026-8-30 10:56:17

    统计数组 题解

    思路

    任意数组都能不断删除第一个元素,因此至少有一种删除序列。删除序列唯一,当且仅当在数组尚未变化时,除第一个位置外没有其他可删位置;递归应用这一条件,可得长度为 kk 的非模糊数组必须满足第 ii 个元素能被每个不超过 ii 的质数整除。

    令 PiP_i 为不超过 ii 的所有不同质数之积,则第 ii 个元素有 ⌊m/Pi⌋\lfloor m/P_i\rfloor 种选择。因此长度为 kk 的非模糊数组数为

    $$u_k=\prod_{i=1}^k\left\lfloor\frac m{P_i}\right\rfloor.$$

    长度为 kk 的数组总数为 mkm^k,所以把 mk−ukm^k-u_k 对所有 kk 求和即可。Pi>mP_i>m 后因子为零,后续 uku_k 都为零。

    做法

    子任务 1 枚举所有数组,并在每个当前状态枚举所有满足最大公约数条件的删除位置,搜索到两条路径即可判为模糊。

    子任务 2 对每个 ii 从头乘起所有不超过 ii 的质数,再按公式更新乘积。

    完整做法用筛法判断 ii 是否为质数,只有质数出现时才把它乘入 PiP_i。乘法前判断是否会超过 mm,避免溢出;同时迭代维护 mim^i 和 uiu_i。

    复杂度

    子任务 1 的时间复杂度为 O(∑k=1nmkk!)O(\sum_{k=1}^n m^k k!),空间复杂度为 O(n)O(n)。

    子任务 2 的时间复杂度为 O(n2log⁡n)O(n^2\log n),空间复杂度为 O(1)O(1)。

    完整做法的时间复杂度为 O(nlog⁡log⁡n)O(n\log\log n),空间复杂度为 O(n)O(n)。

    • 1

    信息

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