我们将暴力计算出二元生成函数
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)=∑n≥1∑k=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=1∑mS⊆{1,2,⋯m−1}∑(−1)∣S∣Q(S,z,t,j)
这个意思是说对于所有
i
∈
S
i \in S
i∈S, 我们强制让所有
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)−1⋯−1◯(⋅t)∣∣∣⋯∣∣∣◯(⋅t)−1⋯−1◯(⋅t)(⋅Len) with(⋅t)−1⋯−1◯∣∣∣⋯∣∣∣◯−1◯−1⋯−1◯
其中 ◯ \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+1−zzt−1+1=1−(1−t)ztz=k≥0∑zk+1t(1−z)k=1−ttk≥0∑(k+1)!zk+1(1−t)k+1=1−tt(ez(1−t)−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+1−zzt1(1−z)2zt1+1−zz1=1−(1−t)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)}
1−L
(z,t)1U
(z,t)1−L
(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)})} (1−z)(1−tez(1−t))t(ez(1−t)−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](1−z)(1−tez(1−t))t(ez(1−t)−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](1−z)(1−tez(1−t))t(ez(1−t)−1))+1=(1−t)[zn](1−z)(1−tez(1−t))1, 用于简化表达式. 接下来我们令
z
=
u
1
−
t
z = \frac u{1-t}
z=1−tu, 就有
[
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](1−z)(1−tez(1−t))1=(1−t)n[un](1−1−tu)(1−teu)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}
(1−t)[zn](1−z)(1−tez(1−t))1=[un](1−1−ut)(1−teu)(1−u)(1−t)n+2=(1−t)n+2[un]((euu−eu+1)(1−teu)−eu+(euu−eu+1)(1−1−ut)1−u1)
主要是前面的 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 的做法类似, 留作习题.