1 条题解
-
0
题解
思路
处理一个普通序列时,令 表示当前所有不同非空子序列中,以符号 结尾的数量,并令
包含空序列。追加符号 后,所有旧子序列都可以追加这个符号,因而新的 恰为旧的 ,其他坐标不变。这是一个 维向量的线性变换,最后一个坐标固定为 。
另一方面,长度为 的数位和模 序列可以按最高位拆成 个长度为 的块;第 块就是基础块的所有符号整体加 再模 。
做法
子任务 1:显式生成
逐个枚举 ,计算其 进制数位和模 ,再按上面的 递推更新。时间 ,空间 。
子任务 2:朴素块矩阵
令 表示长度为 、所有符号整体增加 的块对应的矩阵。 就是追加单个符号 的矩阵。
从第 层计算第 层时,对每个偏移 依次乘上 个子块矩阵。这样每层需要 次矩阵乘法,适合 。再按 的 进制前缀分解乘出长度为 的矩阵。
子任务 3:前后缀积优化
对固定一层的 ,预处理块序列的所有前缀矩阵积 和后缀矩阵积 。偏移为 的完整循环块由区间 后接 ,所以只需一次矩阵乘法即可由 得到 。
每层由 次矩阵乘法降为 次。最后递归处理长度 的前缀:每层先合并若干完整子块,再进入唯一的残缺子块。
矩阵乘法的单个元素用 128 位整数累加后统一取模,避免 64 位累加溢出。
复杂度
- 子任务 1:时间 ,空间 。
- 子任务 2:时间 ,空间 。
- 满分算法:时间 ,空间 。
- 1
信息
- ID
- 1463
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者