牛逼的杜ls在CF上面发了一个生成函数黑科技。
设 k = n − 2 m k=n-2m k=n−2m,并且略去若干种边界情况。
将答案写成生成函数形式,形如: n ! 2 D [ x n ] ∑ i = 0 k ( D i ) ( e x − e − x ) i ( e x + e − x ) D − i \frac{n!}{2^D} [x^n] \sum \limits_{i=0}^{k} \binom{D}{i} (e^x-e^{-x})^i(e^x+e^{-x})^{D-i} 2Dn![xn]i=0∑k(iD)(ex−e−x)i(ex+e−x)D−i。
设 Q ( x ) = ∑ i = 0 k ( D i ) ( x − 1 ) i ( x + 1 ) D − i Q(x)=\sum \limits_{i=0}^{k} \binom{D}{i} (x-1)^i(x+1)^{D-i} Q(x)=i=0∑k(iD)(x−1)i(x+1)D−i。则答案等于 n ! 2 D [ x n ] Q ( e 2 x ) e − D x \frac{n!}{2^D} [x^n] Q(e^{2x}) e^{-Dx} 2Dn![xn]Q(e2x)e−Dx。考虑如何快速求解 Q ( x ) Q(x) Q(x)。
构造如下方程: P ( x ) = D Q ( x ) − x Q ′ ( x ) P(x)=DQ(x)-xQ'(x) P(x)=DQ(x)−xQ′(x),并且将右侧展开。
考虑 x Q ′ ( x ) xQ'(x) xQ′(x)的实际含义,不难发现其为任选一个 x ± 1 x \pm 1 x±1替换为 x x x的结果。假设我们替换掉的是第 i i i个单项式。
同时我们将 D Q ( x ) DQ(x) DQ(x)与 D D D种替换掉的单项式一一对应。
此时若剩余单项式中 x − 1 x-1 x−1的个数不为k,此时被替换的单项式可以为 x − 1 x-1 x−1,也可以为 x − 1 x-1 x−1。做完差后为 − 1 -1 −1与 1 1 1,对答案贡献为0可以忽略不计。
剩余单项式中 x − 1 x-1 x−1的个数为k,此时被替换的单项式仅能为 x + 1 x+1 x+1。会对差产生1的贡献。
因此 P ( x ) = D ( D − 1 k ) ( x − 1 ) k ( x + 1 ) D − k − 1 P(x)=D\binom{D-1}{k}(x-1)^k(x+1)^{D-k-1} P(x)=D(kD−1)(x−1)k(x+1)D−k−1。
考虑如何求 P ( x ) P(x) P(x)。一般的设 P ( x ) = ( x − 1 ) a ( x + 1 ) b P(x)=(x-1)^a(x+1)^b P(x)=(x−1)a(x+1)b。
考虑 P ( x ) P(x) P(x)求导后与 P ( x ) P(x) P(x)的关系式子,不难得到 P ′ ( x ) = a P ( x ) x − 1 + b P ( x ) x + 1 P'(x)=\frac{aP(x)}{x-1}+\frac{bP(x)}{x+1} P′(x)=x−1aP(x)+x+1bP(x)。
根据关系式子我们可以从高到底按位确定 P ( x ) P(x) P(x)的值,因此即可按位确定 Q ( x ) Q(x) Q(x)的值。
复杂度瓶颈在预处理 1 n , 2 n , ⋯ , D n 1^n,2^n,\cdots,D^n 1n,2n,⋯,Dn上,由于其为积性函数可以使用线性筛求解。
时间复杂度 O ( m ( 1 + log m n ) ) O(m(1+\log_mn)) O(m(1+logmn))。
代码链接。