1 条题解
-
0
题解
思路
直接递推
当所有询问的 之和不超过 时,逐项计算数列并累加平方即可,复杂度为 。
的恒等式
令 ,则递推对 都满足 。于是
求和后得到
再利用 Fibonacci 快速倍增求 ,每组询问只需 。
做法
一般系数的四维状态
记 。为了展开平方,还需同时维护相邻两项的平方与乘积。取状态
$$v_k=\begin{bmatrix}S_k\\a_k^2\\a_{k-1}^2\\a_ka_{k-1}\end{bmatrix}.$$由 ,有
以及
因此
$$v_{k+1}= \begin{bmatrix} 1&x^2&y^2&2xy\\ 0&x^2&y^2&2xy\\ 0&1&0&0\\ 0&x&0&y \end{bmatrix}v_k.$$初始状态为
$$v_2=\begin{bmatrix}a_1^2+a_2^2\\a_2^2\\a_1^2\\a_1a_2\end{bmatrix}.$$对转移矩阵计算 次幂即可。实现中一次矩阵乘法的每个单元只累加四个小于模数平方的乘积;其和不会超过无符号 64 位整数范围,因此可在每个单元累加完后只取模一次,以适应最多 组询问。
独立复核递推
设 ,特征根关系可推出
再乘上前缀和对应的因子 ,可得到 的四阶线性递推。正式输出由这一递推配合多项式快速幂独立复算,从而不依赖标准程序的矩阵实现。
正确性证明
引理 1
当 时,恒等式 成立。
证明。 由递推式 ,两边乘以 得 。从 到 求和后中间项全部抵消。∎
引理 2
一般系数下,上述矩阵把 正确转移为 。
证明。 第二行是递推式平方后的展开,第三行把旧的 下移,第四行由递推式乘以 得到;第一行在 上加上第二行的新平方。四个分量均与定义一致。∎
定理
算法对每组询问输出 。
证明。 直接计算。对 ,初始向量确为 ;由引理 2,乘以转移矩阵的 次幂后得到 ,其第一分量按定义就是所求平方和。所有运算在模意义下进行,故输出正确。∎
复杂度
满分算法每组询问时间复杂度 ,额外空间复杂度 ;总时间复杂度为 。
- 1
信息
- ID
- 1013
- 时间
- 1500ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者