洛谷 P14461 【MX-S10-T2】『FeOI-4』青年晚报
P14461 【MX-S10-T2】『FeOI-4』青年晚报
很好得诠释了数学和眼神的重要性
设求导算子为 $ d $ ( 熟悉线代科技的奆佬可以从求导矩阵和单位矩阵结合成分块矩阵形式的角度进行理解),显然对于 $ F $ 的一阶导数可以表示为 $ dF $ ,于是递推关系式可以表示为:
$ F_{i}=(1+d)G_{i-1} $
$ \ $
$ G_{i}=(1-d)F_{i-1} $
再将 $ G_{i-1} $ 和 \(F_{i-1}\) 代换掉,并使用尊贵的平方差公式:
$ F_{i}=(1+d)(1-d)F_{i-2}=(1-d^{2})F_{i-2} $
$ \ $
$ G_{i}=(1-d)(1+d)G_{i-2}=(1-d^{2})G_{i-2} $
此时我们发现,原本两个互推的关系式变成了一个简洁美观的递推式(接下来以 $ F $ 为例子,$ G $ 同理)。
从矩阵的角度理解
- 多项式的向量表示:
$ F = [f₀, f₁, f₂, ..., fₘ] $
$ G = [g₀, g₁, g₂, ..., gₘ] $
- 求导矩阵 $ D $ :
D =
[0 1 0 0 ... 0]
[0 0 2 0 ... 0]
[0 0 0 3 ... 0]
[... ... ... ... ...]
[0 0 0 0 ... m]
[0 0 0 0 ... 0]
即 $ D $ 是一个 $ (m+1)×(m+1) $ 的矩阵,其中 $ D[i][j] = (j+1) 当 i = j+1 $ ,否则为 $ 0 $ 。
于是有 $ F' = D·F $ 。
- 递推关系:
M是一个 $ 2×2 $ 的分块矩阵, $ I
$ 是 $ (m+1)×(m+1) $ 的单位矩阵。
M =
[0, I+D]
[I-D, 0 ]
状态向量:
Vᵢ =
[Fᵢ]
[Gᵢ]
递推关系:
Vᵢ = M · Vᵢ₋₁
于是有:
M² =
[0, I+D] · [0, I+D]
[I-D, 0 ] [I-D, 0 ]
=
[(I+D)(I-D), 0 ]
[0, (I-D)(I+D)]
最终:
M² =
[I-D², 0 ]
[0, I-D² ]
得到:
F₂ = (I - D²)·F₀
G₂ = (I - D²)·G₀
很显然通过递推式自己套自己可以表示为:
$ F_{i}=(1-d{2})F_{i-2k} $
在 $ n $ 为偶数时(奇数就往下推到$ F_{1},G_{1} $ 以后开始 ),令 $ k=\frac{n}{2},i=n $ 时有:
$ F_{n}=(1-d{2})F_{0} $
传奇二项式展开,就可以得到一坨美丽的式子:
$ F_{n}= \displaystyle \sum{k}_{i=0}C_{k}(-1){i}dF_{0} $
这时候就有同学要问了:主播主播,这样时间复杂度不是 $ O(n \cdot m) $ 吗?不得 $ T $ 飞到太阳去?
我们注意到当 $ i > \lfloor \frac{m}{2} \rfloor $ 时,由于导数的次数太猛了,直接给 $ d^{2i}F_{0} $
干成 $ 0 $ ,所以实际算法的时间复杂度为 $ O(m^{2}) $ 。
完结收工!!!!!

看完点赞,养成习惯
\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

浙公网安备 33010602011771号