1 条题解

  • 0
    @ 2026-9-3 11:00:29

    题解

    思路

    一次前缀和会把序列的生成函数乘上 1/(1−z)1/(1-z)。连续做 k+1k+1 次前缀和后,aja_j 对第 tt 项的系数是 (t−j+kk)\binom{t-j+k}{k}。把下标向后平移 k−1k-1,就得到题目中的 (i−j+1k)\binom{i-j+1}{k}。

    做法

    小规模

    先生成数组,再对每个 ii 直接枚举 jj 并计算组合数,复杂度 O(n2k)O(n^2k)。

    k=1k=1

    此时 bi=∑j=1i(i−j+1)ajb_i=\sum_{j=1}^i(i-j+1)a_j,维护普通前缀和与二次前缀和即可在线求出。

    满分算法

    维护 k+1k+1 层前缀和 s1,…,sk+1s_1,\ldots,s_{k+1}。读到 ata_t 时,依次令 s1←s1+ats_1\leftarrow s_1+a_t,并对 2≤r≤k+12\le r\le k+1 令 sr←sr+sr−1s_r\leftarrow s_r+s_{r-1}。

    所有加法对 998244353998244353 取模。此时 sk+1s_{k+1} 正是 bt+k−1b_{t+k-1}。若该下标不超过 nn,将它乘以下标后异或进答案。

    正确性说明

    做 k+1k+1 次前缀和后,aja_j 在位置 tt 的系数为 (t−j+kk)\binom{t-j+k}{k}。令 i=t+k−1i=t+k-1,该系数变成 (i−j+1k)\binom{i-j+1}{k},与 bib_i 的定义完全一致。由于 j>i−k+1j>i-k+1 时组合数为零,未被在线过程读取的后缀项也不会影响对应答案。逐个异或全部合法下标即得到所求值。

    复杂度

    满分算法时间复杂度 O(nk)O(nk),额外空间复杂度 O(k)O(k);小规模算法为 O(n2k)O(n^2k)。

    • 1

    信息

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