考场上就随便莽了个
Θ(k2logr) 的做法发现反正能过,就不管了……直到最近又提起这道题。
事情的经过其实是这样的……偶然看到了 cz_xuyixuan 用 BM 直接给莽过去了,感到有点诧异,于是就冷静了一下,发现这道题的特征根有很强的性质:
- 对于
T=2 的部分,因为递推式是
x2−x−1,所以两个特征根的乘积是
−1。
- 对于
T=3 的部分,因为递推式是
x2−4x+1,所以两个特征根的乘积是
1。
所以,我们原以为
αiβj 总共有
Θ(k2) 种,但是在此题中只有
Θ(k) 种……
那么如何做到更快就呼之欲出了,我们只需要算出每个
αiβj 的系数就行了。
-
对于
T=3 的情况,因为
αβ=1,我们欲求
n∑(kλαn+μα−n) 表为
−k≤j≤k∑νjαjn 的系数
νj,只需计算
k!1i=0∏k−1(λx−i+μx−1) 的系数表示,可以
O(klog2k)。
-
对于
T=2 的情况,因为
αβ=−1,我们所求可以表为
−k≤j≤k∑ξjαjn+ζj(−α)jn,只需计算
k!1i=0∏k−1(λx−i+μx−1t)mod(t2−1) 的系数表示,其中
[t0] 对应
ξ 数列,
[t1] 对应
ζ 数列,可以
O(klog2k)。
由此,可以在
O(klog2k+klogr) 时间内计算出。