loj 3120 黑科技做法

牛逼的杜ls在CF上面发了一个生成函数黑科技

k = n − 2 m k=n-2m k=n2m,并且略去若干种边界情况。

将答案写成生成函数形式,形如: 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=0k(iD)(exex)i(ex+ex)Di

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=0k(iD)(x1)i(x+1)Di。则答案等于 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)eDx。考虑如何快速求解 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 x1的个数不为k,此时被替换的单项式可以为 x − 1 x-1 x1,也可以为 x − 1 x-1 x1。做完差后为 − 1 -1 1 1 1 1,对答案贡献为0可以忽略不计。

剩余单项式中 x − 1 x-1 x1的个数为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(kD1)(x1)k(x+1)Dk1

考虑如何求 P ( x ) P(x) P(x)。一般的设 P ( x ) = ( x − 1 ) a ( x + 1 ) b P(x)=(x-1)^a(x+1)^b P(x)=(x1)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)=x1aP(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))

代码链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值