BJOI2019 勘破神机 新解

考场上就随便莽了个 Θ ( k 2 log r ) \Theta(k^2\log r) 的做法发现反正能过,就不管了……直到最近又提起这道题。

事情的经过其实是这样的……偶然看到了 cz_xuyixuan 用 BM 直接给莽过去了,感到有点诧异,于是就冷静了一下,发现这道题的特征根有很强的性质:

  • 对于 T = 2 T=2 的部分,因为递推式是 x 2 x 1 x^2-x-1 ,所以两个特征根的乘积是 1 -1
  • 对于 T = 3 T=3 的部分,因为递推式是 x 2 4 x + 1 x^2-4x+1 ,所以两个特征根的乘积是 1 1

所以,我们原以为 α i β j \alpha^i \beta^j 总共有 Θ ( k 2 ) \Theta(k^2) 种,但是在此题中只有 Θ ( k ) \Theta(k) 种……

那么如何做到更快就呼之欲出了,我们只需要算出每个 α i β j \alpha^i\beta^j 的系数就行了。

  • 对于 T = 3 T=3 的情况,因为 α β = 1 \alpha\beta = 1 ,我们欲求 n ( λ α n + μ α n k ) \displaystyle\sum_n \binom{\lambda \alpha^n + \mu \alpha^{-n}} k 表为 k j k ν j α j n \displaystyle\sum_{-k\le j\le k} \nu _j \alpha^{jn} 的系数 ν j \nu_j ,只需计算 1 k ! i = 0 k 1 ( λ x i + μ x 1 ) \displaystyle\frac1{k!}\prod_{i=0}^{k-1} (\lambda x - i + \mu x^{-1}) 的系数表示,可以 O ( k log 2 k ) O(k \log^2 k)

  • 对于 T = 2 T=2 的情况,因为 α β = 1 \alpha \beta = -1 ,我们所求可以表为 k j k ξ j α j n + ζ j ( α ) j n \displaystyle \sum_{-k \le j\le k} \xi_j \alpha^{jn} + \zeta _j (-\alpha)^{jn} ,只需计算 1 k ! i = 0 k 1 ( λ x i + μ x 1 t ) m o d ( t 2 1 ) \displaystyle\frac1{k!}\prod_{i=0}^{k-1} (\lambda x - i + \mu x^{-1}t) \bmod (t^2-1) 的系数表示,其中 [ t 0 ] [t^0] 对应 ξ \xi 数列, [ t 1 ] [t^1] 对应 ζ \zeta 数列,可以 O ( k log 2 k ) O(k\log^2 k)

由此,可以在 O ( k log 2 k + k log r ) O(k\log^2 k + k\log r) 时间内计算出。

猜你喜欢

转载自blog.csdn.net/EI_Captain/article/details/105523695
今日推荐