1 条题解

  • 0
    @ 2026-9-3 10:55:02

    Serval 与音乐游戏:题解

    思路

    记 N=snN=s_n。交换求和顺序后,问题等价于对每个 xx 求有多少个 sis_i 能由 ⌊N/x⌋\lfloor N/x\rfloor 与 ⌈N/x⌉\lceil N/x\rceil 的非负整数线性组合表示。

    非整除情形

    当 x∤Nx\nmid N 时,令 k=⌊N/x⌋k=\lfloor N/x\rfloor,则两个数为 k,k+1k,k+1。把

    si=ak+r,0≤r<ks_i=ak+r,\qquad 0\le r<k

    写成

    si=(a−r)k+r(k+1)s_i=(a-r)k+r(k+1)

    可知它可表示当且仅当 r≤ar\le a,即

    $$s_i\bmod k\le\left\lfloor\frac{s_i}{k}\right\rfloor.$$

    不可表示的数恰落在下列区间中:

    [1,k−1],[k+2,2k−1],…,[jk+j+1,(j+1)k−1].[1,k-1],[k+2,2k-1],\ldots, [jk+j+1,(j+1)k-1].

    用值域前缀和即可在常数时间内统计一个区间含有多少个 sis_i。

    具有相同 k=⌊N/x⌋k=\lfloor N/x\rfloor 的 xx 构成连续区间

    $$\left[\left\lfloor\frac{N}{k+1}\right\rfloor+1, \left\lfloor\frac Nk\right\rfloor\right].$$

    整除点 x=N/kx=N/k 若存在,需要从该区间的权值和中暂时删去,交给下一类单独计算。

    整除情形

    当 x∣Nx\mid N 时,令 k=N/xk=N/x,两个生成数都等于 kk,所以 sis_i 可表示当且仅当 k∣sik\mid s_i。

    计算 gi=gcd⁡(si,N)g_i=\gcd(s_i,N)。对每个 NN 的因子 kk,统计有多少个 gig_i 是 kk 的倍数,即可得到对应 x=N/kx=N/k 的 f(x)f(x)。

    做法

    1. 建立序列值域的出现次数前缀和,并统计所有 gcd⁡(si,N)\gcd(s_i,N) 的频次。
    2. 按整除分块枚举所有不同的 k=⌊N/x⌋k=\lfloor N/x\rfloor。对每个 kk 枚举不可表示区间,用前缀和得到失败数量,再乘该块中所有非整除 xx 的和。
    3. 枚举 NN 的每个因子 kk,累加所有为 kk 倍数的最大公因数频次,并加入权值 N/kN/k 的贡献。

    小规模子任务可以直接枚举 pi,qip_i,q_i;中规模子任务可以对每对 (x,si)(x,s_i) 使用余数判据;满分算法才使用整除分块、区间前缀和与因子汇总。

    正确性证明

    引理 1:若 x∤Nx\nmid N 且 k=⌊N/x⌋k=\lfloor N/x\rfloor,则 sis_i 可表示当且仅当 si mod k≤⌊si/k⌋s_i\bmod k\le\lfloor s_i/k\rfloor。

    设 si=ak+rs_i=ak+r。若 r≤ar\le a,取 qi=r,pi=a−rq_i=r,p_i=a-r 即得到合法表示。反之,任意表示可写为 (pi+qi)k+qi(p_i+q_i)k+q_i;将 qiq_i 对 kk 化简后仍需至少 rr 个 k+1k+1,故 r>ar>a 时不可能。结论成立。

    引理 2:算法对所有非整除 xx 的贡献计算正确。

    由引理 1,不可表示条件在固定商 kk 时恰由算法列出的互不相交区间覆盖。前缀和准确统计其中的序列元素。整除分块枚举了所有具有该商的连续 xx,并删除唯一可能的整除点,因此每个非整除 xx 被且仅被计算一次。

    引理 3:算法对所有整除 xx 的贡献计算正确。

    当 x∣Nx\mid N 时两个生成数均为 k=N/xk=N/x,所以可表示性等价于 k∣sik\mid s_i。因为 k∣Nk\mid N,又有 k∣sik\mid s_i 当且仅当 k∣gcd⁡(si,N)k\mid\gcd(s_i,N)。算法正是按此条件汇总频次,故贡献正确。

    定理:算法输出题目所求总和。

    所有 x∈[1,N]x\in[1,N] 恰分为整除与非整除两类。由引理 2、引理 3,两类贡献均被正确且不重不漏地计算,所以总和正确。

    复杂度

    每组测试的时间复杂度为 O(N+nlog⁡N)O(N+n\log N),空间复杂度为 O(N)O(N)。利用所有测试的 NN 与 nn 之和限制,总复杂度满足要求。

    • 1

    信息

    ID
    1356
    时间
    3000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    0
    上传者