BJOI2019 勘破神机 新解

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

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

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

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

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

  • 对于 T = 3 T=3 T=3 的情况,因为 α β = 1 \alpha\beta = 1 αβ=1,我们欲求 ∑ n ( λ α n + μ α − n k ) \displaystyle\sum_n \binom{\lambda \alpha^n + \mu \alpha^{-n}} k n(kλαn+μαn) 表为 ∑ − k ≤ j ≤ k ν j α j n \displaystyle\sum_{-k\le j\le k} \nu _j \alpha^{jn} kjkνjαjn 的系数 ν j \nu_j ν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}) k!1i=0k1(λxi+μx1) 的系数表示,可以 O ( k log ⁡ 2 k ) O(k \log^2 k) O(klog2k)

  • 对于 T = 2 T=2 T=2 的情况,因为 α β = − 1 \alpha \beta = -1 αβ=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} kjkξjαjn+ζj(α)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) k!1i=0k1(λxi+μx1t)mod(t21) 的系数表示,其中 [ t 0 ] [t^0] [t0] 对应 ξ \xi ξ 数列, [ t 1 ] [t^1] [t1] 对应 ζ \zeta ζ 数列,可以 O ( k log ⁡ 2 k ) O(k\log^2 k) O(klog2k)

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值