我们将暴力计算出二元生成函数
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 = 1 n A n , k n ! z n t k , 其中
A
n
,
k
A_{n,k}
A n , k 是所有
n
n
n 长度的序列中
k
k
k 出现次数的和. 考虑容斥原理. 对于
max
k
=
m
\max k = m
max k = 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 ∑ m S ⊆ { 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
t k 上面。因此这个组合结构的统计可以被认为是对枚举如下结构计算代数和:
◯
(
⋅
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 ) ( ⋅ L e n )
w i t h ( ⋅ 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 − z z t − 1 + 1 = 1 − ( 1 − t ) z t z = k ≥ 0 ∑ z k + 1 t ( 1 − z ) k = 1 − t t k ≥ 0 ∑ ( k + 1 ) ! z k + 1 ( 1 − t ) k + 1 = 1 − t t ( e z ( 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 − z z t 1 ( 1 − z ) 2 z t 1 + 1 − z z 1 = 1 − ( 1 − t ) z t z = 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 ) 1 U
( 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 − t e z ( 1 − t ) ) t ( e z ( 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)})}
[ z n ] ( 1 − z ) ( 1 − t e z ( 1 − t ) ) t ( e z ( 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)})}
( [ z n ] ( 1 − z ) ( 1 − t e z ( 1 − t ) ) t ( e z ( 1 − t ) − 1 ) ) + 1 = ( 1 − t ) [ z n ] ( 1 − z ) ( 1 − t e z ( 1 − t ) ) 1 , 用于简化表达式. 接下来我们令
z
=
u
1
−
t
z = \frac u{1-t}
z = 1 − t u , 就有
[
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)}
[ z n ] ( 1 − z ) ( 1 − t e z ( 1 − t ) ) 1 = ( 1 − t ) n [ u n ] ( 1 − 1 − t u ) ( 1 − t e u ) 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 ) [ z n ] ( 1 − z ) ( 1 − t e z ( 1 − t ) ) 1 = [ u n ] ( 1 − 1 − u t ) ( 1 − t e u ) ( 1 − u ) ( 1 − t ) n + 2 = ( 1 − t ) n + 2 [ u n ] ( ( e u u − e u + 1 ) ( 1 − t e u ) − e u + ( e u u − e u + 1 ) ( 1 − 1 − u t ) 1 − u 1 )
主要是前面的 exp 部分,由于
[
u
m
]
e
k
u
=
k
m
m
!
[u^m]\mathrm{e}^{ku} = \frac{k^m}{m!}
[ u m ] e k u = m ! k m , 可以多点求值做到
Θ
(
n
log
2
n
)
\Theta(n\log^2 n)
Θ ( n log 2 n ) . 如果你常数不大, 可以通过.
当然也可以优化到
Θ
(
n
log
n
)
\Theta(n\log n)
Θ ( n log n ) 通过拉格朗日反演, 和 xtq 的做法类似, 留作习题.