CF#641 F2 Slime and Sequences 另解

我们将暴力计算出二元生成函数 F ^ ( z , t ) = ∑ n ≥ 1 ∑ k = 1 n A n , k z n t k n ! \widehat F(z, t) = \sum_{n\ge 1}\sum_{k=1}^n A_{n,k}\frac{z^nt^k}{n!} F (z,t)=n1k=1nAn,kn!zntk, 其中 A n , k A_{n,k} An,k 是所有 n n n 长度的序列中 k k k 出现次数的和. 考虑容斥原理. 对于 max ⁡ k = m \max k = m maxk=m 的序列, 我们有
∑ j = 1 m ∑ S ⊆ { 1 , 2 , ⋯ m − 1 } ( − 1 ) ∣ S ∣ Q ( S , z , t , j ) \sum_{j=1}^m \sum_{S \subseteq \{1, 2, \cdots m-1\}} (-1)^{|S|} Q(S, z, t, j) j=1mS{1,2,m1}(1)SQ(S,z,t,j)
这个意思是说对于所有 i ∈ S i \in S iS, 我们强制让所有 i i i 出现在 i + 1 i + 1 i+1 之前, 统计 j j j 的出现次数之和

我们考虑改进枚举顺序,由于每个强制要求就将连续几个 k k k 的关系“绑定”在一起,我们反过来枚举这个强制要求的产生,那么我们可以认为一连串的 k k k 就组成了一个“基本单元”。而接下来我们还要枚举我们所需要统计的各个 k k k 出现的次数和,贡献到 t k t^k tk 上面。因此这个组合结构的统计可以被认为是对枚举如下结构计算代数和:

◯ ( ⋅ t ) − 1 ◯ ( ⋅ t ) − 1 ⋯ − 1 ◯ ( ⋅ t ) | ⋯ | ◯ ( ⋅ t ) − 1 ⋯ − 1 ◯ ( ⋅ t ) ( ⋅ L e n ) ⏞ w i t h ( ⋅ t ) − 1 ⋯ − 1 ◯ | ⋯ | ◯ − 1 ◯ − 1 ⋯ − 1 ◯ \overbrace{\left.\bigcirc {\color{blue}(\cdot t)} \frac{\tiny \color{red} -1}{}\bigcirc {\color{blue}(\cdot t)} \frac{\tiny \color{red} -1}{} \cdots \frac{\tiny \color{red} -1}{} \bigcirc {\color{blue}(\cdot t)} \middle\vert \cdots \middle\vert \bigcirc {\color{blue}(\cdot t)} \frac{\tiny \color{red} -1}{}\cdots \frac{\tiny \color{red} -1}{} {\color{green}\bigcirc} {\color{blue}(\cdot t)}{\color{green}(\cdot \mathrm{Len})} \right.}^{\mathrm{with} {\color{blue}(\cdot t)}} \left. \frac{\tiny \color{red} -1}{} \cdots \frac{\tiny \color{red} -1}{} \bigcirc \middle\vert \cdots \middle\vert \bigcirc \frac{\tiny \color{red} -1}{}\bigcirc \frac{\tiny \color{red} -1}{} \cdots \frac{\tiny \color{red} -1}{} \bigcirc \right. (t)1(t)11(t)(t)11(t)(Len) with(t)11111
其中 ◯ \bigcirc 是一个非空同色列,而 − - 表示两个颜色之间的出现位置关系被严格限制, ∣ | 表示之间没有限制。

对于隔板中间的过程,易于用 OGF 表示,最后混合颜色的过程,易于用 EGF 表示。

主要的 OGF 分成三个部分,第一个阶段是采集了 t t t 的部分,第二个阶段是采集了 t t t 的一个终止段,且在终止位置统计了某个颜色的出现次数,第三个阶段是不采集 t t t 的部分。

我们分别算出三个阶段:
第一阶段:
L ( z , t ) = − 1 1 + z 1 − z t + 1 = t z 1 − ( 1 − t ) z = ∑ k ≥ 0 z k + 1 t ( 1 − z ) k L ^ ( z , t ) = t 1 − t ∑ k ≥ 0 z k + 1 ( k + 1 ) ! ( 1 − t ) k + 1 = t 1 − t ( e z ( 1 − t ) − 1 ) \begin{aligned} L(z,t) &=\frac{-1}{1+\frac z{1-z}t} + 1 \\ &= \frac{t z}{1-(1-t) z}\\ &= \sum_{k\ge 0} z^{k+1} t(1-z)^k\\ \widehat L(z,t) &= \frac t{1-t}\sum_{k\ge 0} \frac{z^{k+1}}{(k+1)!} (1-t)^{k+1}\\ &= \frac t{1-t} (\mathrm e^ {z(1-t)} - 1) \end{aligned} L(z,t)L (z,t)=1+1zzt1+1=1(1t)ztz=k0zk+1t(1z)k=1ttk0(k+1)!zk+1(1t)k+1=1tt(ez(1t)1)
第二阶段:
U ( z , t ) = 1 1 + z 1 − z t z t ( 1 − z ) 2 1 1 + z 1 − z = t z 1 − ( 1 − t ) z = L ( z , t ) U ^ ( z , t ) = L ^ ( z , t ) \begin{aligned} U(z,t) &= \frac1{1+\frac z{1-z}t} \frac {zt}{(1-z)^2} \frac1{1+\frac z{1-z}}\\ &= \frac{tz}{1-(1-t)z} = L(z,t)\\ \widehat U(z,t)&= \widehat L(z,t) \end{aligned} U(z,t)U (z,t)=1+1zzt1(1z)2zt1+1zz1=1(1t)ztz=L(z,t)=L (z,t)
第三阶段直接有 L ( z , 1 ) = z = L ^ ( z , 1 ) L(z, 1) = z = \widehat L(z, 1) L(z,1)=z=L (z,1)
因此,答案的 EGF 就是
1 1 − L ^ ( z , t ) U ^ ( z , t ) 1 1 − L ^ ( z , 1 ) \frac1{1-\widehat L(z,t)} \widehat U(z, t) \frac 1{1 - \widehat L(z, 1)} 1L (z,t)1U (z,t)1L (z,1)1

经过一番化简, 我们就得到了 t ( e z ( 1 − t ) − 1 ) ( 1 − z ) ( 1 − t e z ( 1 − t ) ) \frac{t(\mathrm e^{z(1-t)}-1)}{(1-z) (1-t \mathrm e^{z(1-t)})} (1z)(1tez(1t))t(ez(1t)1).

我们现在要计算
[ z n ] t ( e z ( 1 − t ) − 1 ) ( 1 − z ) ( 1 − t e z ( 1 − t ) ) [z^n]\frac{t(\mathrm e^{z(1-t)}-1)}{(1-z) (1-t \mathrm e^{z(1-t)})} [zn](1z)(1tez(1t))t(ez(1t)1)
考虑 ( [ z n ] t ( e z ( 1 − t ) − 1 ) ( 1 − z ) ( 1 − t e z ( 1 − t ) ) ) + 1 = ( 1 − t ) [ z n ] 1 ( 1 − z ) ( 1 − t e z ( 1 − t ) ) \left([z^n]\frac{t(\mathrm e^{z(1-t)}-1)}{(1-z) (1-t \mathrm e^{z(1-t)})}\right) + 1 = (1-t)[z^n] \frac 1{(1-z)(1-t\mathrm e^{z(1-t)})} ([zn](1z)(1tez(1t))t(ez(1t)1))+1=(1t)[zn](1z)(1tez(1t))1, 用于简化表达式. 接下来我们令 z = u 1 − t z = \frac u{1-t} z=1tu, 就有
[ z n ] 1 ( 1 − z ) ( 1 − t e z ( 1 − t ) ) = ( 1 − t ) n [ u n ] 1 ( 1 − u 1 − t ) ( 1 − t e u ) [z^n]\frac 1{(1-z)(1-t\mathrm e^{z(1-t)})} = (1-t)^n[u^n] \frac1{(1-\frac u{1-t})(1-t\mathrm{e}^u)} [zn](1z)(1tez(1t))1=(1t)n[un](11tu)(1teu)1
这一步的好处在于我们消去了上指标的一个变量, 方便我们接下来做分式分解
( 1 − t ) [ z n ] 1 ( 1 − z ) ( 1 − t e z ( 1 − t ) ) = [ u n ] ( 1 − t ) n + 2 ( 1 − t 1 − u ) ( 1 − t e u ) ( 1 − u ) = ( 1 − t ) n + 2 [ u n ] ( − e u ( e u u − e u + 1 ) ( 1 − t e u ) + 1 1 − u ( e u u − e u + 1 ) ( 1 − t 1 − u ) ) \begin{aligned} (1-t)[z^n] \frac 1{(1-z)(1-t\mathrm e^{z(1-t)})} &= [u^n]\frac{(1-t)^{n+2}}{(1-\frac{t}{1-u})(1-t\mathrm e^u)(1-u)}\\&= (1-t)^{n+2} [u^n] \left(\frac{-\mathrm e^u}{\left(\mathrm e^u u-\mathrm e^u+1\right) \left(1-t \mathrm e^u\right)}+\frac{\frac{1}{1-u}}{\left(\mathrm e^u u-\mathrm e^u+1\right) (1-\frac{t}{1-u})}\right)\end{aligned} (1t)[zn](1z)(1tez(1t))1=[un](11ut)(1teu)(1u)(1t)n+2=(1t)n+2[un]((euueu+1)(1teu)eu+(euueu+1)(11ut)1u1)

主要是前面的 exp 部分,由于 [ u m ] e k u = k m m ! [u^m]\mathrm{e}^{ku} = \frac{k^m}{m!} [um]eku=m!km, 可以多点求值做到 Θ ( n log ⁡ 2 n ) \Theta(n\log^2 n) Θ(nlog2n). 如果你常数不大, 可以通过.

当然也可以优化到 Θ ( n log ⁡ n ) \Theta(n\log n) Θ(nlogn) 通过拉格朗日反演, 和 xtq 的做法类似, 留作习题.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值