生成函数及母函数。一共分为两类:普遍性函数、指数性函数。
对于序列 a 0 , a 1 , a 2 , … a_0,a_1,a_2,\dots a0,a1,a2,…,定义 G ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ + a n x n … \displaystyle G(x)=a_0+a_1x+a_2x^2+a_3x^3+\dots+a_nx^n\dots G(x)=a0+a1x+a2x2+a3x3+⋯+anxn… 则称 G ( x ) \displaystyle G(x) G(x) 是数列的生成函数。
生成函数是说,构造这么一个多项式函数 g ( x ) g(x) g(x),使得 x x x 的 n n n 次方系数为 f ( n ) f(n) f(n)。
举个例子最清晰:
问: x 1 + x 2 + ⋯ + x k = n x_1+x_2+\dots+ x_k=n x1+x2+⋯+xk=n
问有多少种非负整数解?
解:令 G ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + ⋯ + a n x n … G(x)=a_0+a_1x+a_2x^2+a_3x^3+\dots+a_nx^n\dots G(x)=a0+a1x+a2x2+a3x3+⋯+anxn…
那么把题转化为 G k ( x ) G^k(x) Gk(x) 的 n n n 次项的系数。
G ( x ) = 1 1 − x ( x < 1 ) \displaystyle G(x)=\frac{1}{1-x}(x < 1) G(x)=1−x1(x<1)
加一点小知识:
( n k ) = n ( n − 1 ) ( n − 2 ) … ( n − k + 1 ) k ! \displaystyle\left(\begin{matrix}n \\k\end{matrix}\right)=\frac{n(n-1)(n-2)\dots(n-k+1)}{k!} (nk)=k!n(n−1)(n−2)…(n−k+1) 对于当 n n n 为负数或小数时一样适用
运用二项式展开:
n n n 次项系数为 ( − n k ) \displaystyle\left(\begin{matrix}-n \\k\end{matrix}\right) (−nk),根据组合数定义: n n n 次项系数为 ( n + k − 1 k − 1 ) \displaystyle\left(\begin{matrix}n+k-1 \\k-1\end{matrix}\right) (n+k−1k−1)
设 S k ( x ) = ∑ i = 0 x i k \displaystyle S_k(x)=\sum\limits_{i=0}^{x}i^k Sk(x)=i=0∑xik,给定正整数 n n n 和序列 a a a,求: ∑ k = 0 n S k ( x ) a k \displaystyle \sum\limits_{k=0}^{n}S_k(x)a_k k=0∑nSk(x)ak
数据范围: 1 ≤ n ≤ 2 × 1 0 5 1\leq n\leq 2\times 10^5 1≤n≤2×105
解:
假设 S k ( x ) = ∑ i = 0 x − 1 i k \displaystyle S_k(x)=\sum\limits_{i=0}^{x-1}i^k Sk(x)=i=0∑x−1ik,之后只要把所有的 x x x 换成 x + 1 x+1 x+1 即可,那么有
S k ( x ) = 1 k + 1 ∑ i = 0 k ( k + 1 i ) B i x k + 1 − i \displaystyle S_k(x)=\frac{1}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{i}B_{i}x^{k+1-i} Sk(x)=k+11i=0∑k(ik+1)Bixk+1−i
这个并不是很好看,所以考虑枚举 k − i k-i k−i :
S k ( x ) = 1 k + 1 ∑ i = 0 k ( k + 1 k − i ) B k − i x i + 1 \displaystyle S_k(x)=\frac{1}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{k-i}B_{k-i}x^{i+1} Sk(x)=k+11i=0∑k(k−ik+1)Bk−ixi+1
利用二项式的对称性:
S k ( x ) = 1 k + 1 ∑ i = 0 k ( k + 1 i + 1 ) B k − i x i + 1 \displaystyle S_k(x)=\frac{1}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{i+1}B_{k-i}x^{i+1} Sk(x)=k+11i=0∑k(i+1k+1)Bk−ixi+1
于是答案为
∑ k = 0 n a k k + 1 ∑ i = 0 k ( k + 1 i + 1 ) B k − i x i + 1 \displaystyle \sum\limits_{k=0}^{n}\frac{a_k}{k+1}\sum\limits_{i=0}^{k}\binom{k+1}{i+1}B_{k-i}x^{i+1} k=0∑nk+1aki=0∑k(i+1k+1)Bk−ixi+1
显然交换求和顺序
∑ i = 0 n x i + 1 ∑ k = i n a k k + 1 ( k + 1 i + 1 ) B k − i \displaystyle \sum\limits_{i=0}^{n}x^{i+1}\sum\limits_{k=i}^{n}\frac{a_k}{k+1}\binom{k+1}{i+1}B_{k-i} i=0∑nxi+1k=i∑nk+1ak(i+1k+1)Bk−i
拆掉二项式
∑ i = 0 n x i + 1 ( i + 1 ) ! ∑ k = i n a k k ! B k − i ( k − i ) ! \displaystyle \sum\limits_{i=0}^{n}\frac{x^{i+1}}{(i+1)!}\sum\limits_{k=i}^{n}a_kk!\frac{B_{k-i}}{(k-i)!} i=0∑n(i+1)!xi+1k=i∑nakk!(k−i)!Bk−i
直接减法卷积即可,但是这里的 x x x 实际上是 x + 1 x+1 x+1,于是我们考虑下面的问题,求
∑ i = 0 n f i ( x + 1 ) i \displaystyle \sum\limits_{i=0}^{n}f_i(x+1)^i i=0∑nfi(x+1)i
直接利用二项式定理:
∑ i = 0 n f i ∑ j = 0 i ( i j ) x j \displaystyle \sum\limits_{i=0}^{n}f_i\sum\limits_{j=0}^{i}\binom{i}{j}x^j i=0∑nfij=0∑i(ji)xj
交换求和顺序之后减法卷积即可。
置换简单来说就是对元素进行重排列,举个例子 [ 1 , n ] [1,n] [1,n] 的置换是
( 1 2 3 … n a 1 a 2 a 3 … a n ) \left( \begin{matrix} 1&2&3&\dots&n \\ a_1&a_2&a_3&\dots&a_n \end{matrix} \right) (1a12a23a3……nan)
其中 a 1 , a 2 , … a n a_1,a_2,\dots a_n a1,a2,…an 就是对 1 , 2 , … n 1,2,\dots n 1,2,…n 的新排列
其实就是
#define 1 a_1
#define 2 a_2
...
用 D ( a j ) D(a_j) D(aj) 表示在置换 a j a_j aj 下不变的元素的个数。 L L L 表示本质不同的方案数。
L = 1 ∣ G ∣ ∑ j = 1 s D ( a j ) \displaystyle L=\frac{1}{|G|}\sum^{s}_{j=1}D(a_j) L=∣G∣1j=1∑sD(aj)
对于刚才那个例子在 N = 4 N=4 N=4 的情况下的四种置换:
( 1 2 3 4 1 2 3 4 ) ( 1 2 3 4 2 3 4 1 ) ( 1 2 3 4 3 4 1 2 ) ( 1 2 3 4 4 1 2 3 ) \left( \begin{matrix} 1&2&3&4 \\ 1&2&3&4 \end{matrix} \right) \left( \begin{matrix} 1&2&3&4 \\ 2&3&4&1 \end{matrix} \right) \left( \begin{matrix} 1&2&3&4 \\ 3&4&1&2 \end{matrix} \right) \left( \begin{matrix} 1&2&3&4 \\ 4&1&2&3 \end{matrix} \right) (11223344)(12233441)(13243142)(14213243)
所有方案在置换 a 1 a_1 a1 下都不变, D ( a 1 ) = 16 D(a_1)=16 D(a1)=16
X X X X XXXX XXXX 和 E E E E EEEE EEEE 在置换 a 2 a_2 a2 下都不变, D ( a 2 ) = 2 D(a_2)=2 D(a2)=2
X X X X XXXX XXXX 和 E E E E EEEE EEEE 以及 X E X E XEXE XEXE 和 E X E X EXEX EXEX 在置换 a 3 a_3 a3 下不变, D ( a 3 ) = 4 D(a_3)=4 D(a3)=4
X X X X XXXX XXXX 和 E E E E EEEE EEEE 在置换 a 4 a_4 a4 下不变, D ( a 4 ) = 2 D(a_4)=2 D(a4)=2
∴ L = 1 4 ( 16 + 2 + 4 + 2 ) = 6 \displaystyle\therefore L=\frac{1}{4}(16+2+4+2)=6 ∴L=41(16+2+4+2)=6
我们发现要计算 D ( a j ) D(a_j) D(aj) 很不容易,所以 Polya 老头就教我们了一个很好的办法。
我们先介绍一下循环的概念:
( a 1 a 2 … a n ) = ( a 1 a 2 … a n a 2 a 3 … a 1 ) (a_1a_2\dots a_n)=\left(\begin{matrix}a_1&a_2&\dots&a_n \\a_2&a_3&\dots&a_1\end{matrix}\right) (a1a2…an)=(a1a2a2a3……ana1)
例如:
( 1 2 3 4 5 1 3 2 4 5 ) = ( 23 ) ( 1 ) ( 4 ) ( 5 ) \left(\begin{matrix}1&2&3&4&5\\1&3&2&4&5\end{matrix}\right)=(23)(1)(4)(5) (1123324455)=(23)(1)(4)(5)
称为 n n n 阶循环,置换的循环节数是上述的循环个数。
其实一个置换可以写成若干个不相交的循环的乘积,两个循环不相交的意思是循环 ( a 1 a 2 … a n ) (a_1 a_2\dots a_n) (a1a2…an) 和 ( b 1 b 2 … b n ) (b_1 b_2\dots b_n) (b1b2…bn) 中 a i ≠ b j , i , j = 1 , 2 , … n a_i \neq b_j,i,j=1,2,\dots n ai=bj,i,j=1,2,…n 这样的表示是唯一的。
现在开始正式的 Polya 定理:
设 G G G 是 p p p 个对象的一个置换群,用 m m m 种颜色涂染 p p p 个对象,则不同的染色方案是:
L = 1 ∣ G ∣ ( m c ( g 1 ) + m c ( g 2 ) + ⋯ + m c ( g s ) ) \displaystyle L=\frac{1}{|G|}(m^{c(g_1)}+m^{c(g_2)}+\dots+m^{c(g_s)}) L=∣G∣1(mc(g1)+mc(g2)+⋯+mc(gs))
其中 G = { g 1 , g 2 , … g s } G=\lbrace g_1,g_2,\dots g_s\rbrace G={g1,g2,…gs}, c ( g i ) c(g_i) c(gi) 为置换 g i g_i gi 的循环节数 ( i = 1 , 2 , … s ) (i=1,2,\dots s) (i=1,2,…s)
继续举 Burnside 引理那个例子,我们给 N = 4 N=4 N=4 的环编号: 1 2 4 3 \begin{matrix}1&2\\4&3\end{matrix} 1423
构造一个置换群 G ′ = { g 1 , g 2 , … g s } G'=\lbrace g_1,g_2,\dots g_s\rbrace G′={g1,g2,…gs}, ∣ G ′ ∣ = 4 |G'|=4 ∣G′∣=4 令 g i g_i gi 的循环节数为 c ( g i ) ( i = 1 , 2 , 3 , 4 ) c(g_i) (i=1,2,3,4) c(gi)(i=1,2,3,4),在 G ′ G' G′ 的作用下,其中:
g 1 g_1 g1 表示转 0 ∘ 0^\circ 0∘ 即 g 1 = ( 1 ) ( 2 ) ( 3 ) ( 4 ) , c ( g 1 ) = 4 , 2 c ( g 1 ) = 2 4 = 16 = D ( a 1 ) g_1=(1)(2)(3)(4),c(g_1)=4,2^{c(g_1)}=2^4=16=D(a_1) g1=(1)(2)(3)(4),c(g1)=4,2c(g1)=24=16=D(a1)
g 2 g_2 g2 表示转 9 0 ∘ 90^\circ 90∘ 即 g 2 = ( 4321 ) , c ( g 2 ) = 1 , 2 c ( g 2 ) = 2 1 = 2 = D ( a 2 ) g_2=(4321), c(g_2)=1,2^{c(g_2)}=2^1=2=D(a_2) g2=(4321),c(g2)=1,2c(g2)=21=2=D(a2)
g 3 g_3 g3 表示转 18 0 ∘ 180^\circ 180∘ 即 g 3 = ( 13 ) ( 24 ) , c ( g 3 ) = 2 , 2 c ( g 2 ) = 2 2 = 4 = D ( a 3 ) g_3=(13)(24), c(g_3)=2, 2^{c(g_2)}=2^2=4=D(a_3) g3=(13)(24),c(g3)=2,2c(g2)=22=4=D(a3)
g 4 g_4 g4 表示转 27 0 ∘ 270^\circ 270∘ 即 g 4 = ( 1234 ) , c ( g 4 ) = 1 , 2 c ( g 4 ) = 2 1 = 2 = D ( a 4 ) g_4=(1234), c(g_4)=1, 2^{c(g_4)}=2^1=2=D(a_4) g4=(1234),c(g4)=1,2c(g4)=21=2=D(a4)
有两种点 C 和 H,每个 C 点和每个 H 点都是相同的,即无标号。求满足以下条件的不同无向图的个数:
由 C 点和 H 点组成。
C 点个数 n n n,H点个数 2 n 2n 2n。
每个 C 点度数为 4 4 4,每个 H 点度数为 1 1 1。
1 ≤ n ≤ 1000001 1 \leq n\le 1000001 1≤n≤1000001
解:
把碳-碳双键看作关键边,断开这条关键边,两边分别是一棵根节点的子节点个数 ≤ 2 \leq 2 ≤2,除根节点外子节点个数 ≤ 3 \leq 3 ≤3 的无标号有根树
先用 Burnside 引理求出这棵树的方案再合并即可
设 n n n 个点的烷基计数的普通生成函数为 A ( x ) A(x) A(x),要求的树的普通生成函数为 P ( x ) P(x) P(x)
P ( x ) = x A ( x ) 2 + A ( x 2 ) 2 P(x)=x\frac{A(x)^2+A(x^2)}{2} P(x)=x2A(x)2+A(x2)
设答案的普通生成函数为 Q ( x ) Q(x) Q(x)
Q ( x ) = ( P ( x ) − 1 ) 2 + P ( x 2 ) − 1 2 Q(x)=\frac{(P(x)-1)^2+P(x^2)-1}{2} Q(x)=2(P(x)−1)2+P(x2)−1
简化计算的一个好东东。
F ( n ) F(n) F(n) 和 f ( n ) f(n) f(n) 是定义在非负整数集上的两个函数,并且 F ( n ) = ∑ d ∣ n f ( d ) \displaystyle F(n)=\sum_{d|n}f(d) F(n)=d∣n∑f(d) 那么:
f ( n ) = ∑ d ∣ n μ ( d ) F ( n d ) \displaystyle f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d}) f(n)=d∣n∑μ(d)F(dn)
μ \mu μ 的定义如下:
若 d = 1 , μ ( d ) = 1 d=1,\mu(d)=1 d=1,μ(d)=1
若 d = p 1 p 2 … p k d=p_1p_2\dots p_k d=p1p2…pk, p i p_i pi 均为互异素数, μ ( d ) = ( − 1 ) k \mu(d)=(-1)^k μ(d)=(−1)k
其他情况: μ ( d ) = 0 \mu(d)=0 μ(d)=0
μ \mu μ 函数有几个性质:
1. ∀ n ∈ Z + , ∑ d ∣ n μ ( d ) = { 1 n = 1 0 n > 1 \displaystyle\forall n\in Z^+, \sum_{d|n}\mu(d)= \begin{cases}1 & n=1\\0 & n>1\end{cases} ∀n∈Z+,d∣n∑μ(d)={10n=1n>1
2. ∀ n ∈ Z + , ∑ d ∣ n μ ( d ) d = ϕ ( n ) n \displaystyle\forall n\in Z^+, \sum_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n} ∀n∈Z+,d∣n∑dμ(d)=nϕ(n)
证明:
f ( n ) = ∑ d ∣ n μ ( d ) F ( n d ) = ∑ d ∣ n μ ( d ) ∑ k ∣ n d f ( k ) = ∑ k ∣ n f ( k ) ∑ d n k μ ( d ) \displaystyle f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}f(k)=\sum_{k|n}f(k)\sum_{d\frac{n}{k}}\mu(d) f(n)=d∣n∑μ(d)F(dn)=d∣n∑μ(d)k∣dn∑f(k)=k∣n∑f(k)dkn∑μ(d)
∵ ∑ d ∣ n μ ( d ) = { 1 n = 1 0 n > 1 \because \sum_{d|n}\mu(d)=\begin{cases}1&n=1 \\0&n>1\end{cases} ∵∑d∣nμ(d)={10n=1n>1
∴ w h e n n k = 1 \displaystyle\therefore when\frac{n}{k}=1 ∴whenkn=1就是$ n == k , , ,\displaystyle\sum_{d|\frac{n}{k}}\mu(d)=1$,其余时候为 0 0 0
也就搞出来了
求: ∑ i = 1 n ∑ j = 1 m τ ( i ) τ ( j ) τ ( gcd ( i , j ) ) \displaystyle\sum_{i = 1}^n \sum_{j = 1}^m \tau(i) \tau(j) \tau(\gcd(i, j)) i=1∑nj=1∑mτ(i)τ(j)τ(gcd(i,j))
τ τ τ 表示约数个数,比如 τ ( 6 ) = 4 \tau(6) = 4 τ(6)=4
1 ≤ n , m ≤ 2 × 1 0 6 , 1 ≤ p ≤ 1 0 9 1\leq n,m \leq 2\times10^6,1 \leq p \leq 10^9 1≤n,m≤2×106,1≤p≤109
解:
原式 = ∑ d = 1 min ( n , m ) τ ( d ) ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = d ] τ ( i ) τ ( j ) = ∑ d = 1 min ( n , m ) τ ( d ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ [ gcd ( i , j ) = 1 ] τ ( i d ) τ ( j d ) = ∑ d = 1 min ( n , m ) τ ( d ) ∑ i = 1 ⌊ n d ⌋ ∑ j = 1 ⌊ m d ⌋ τ ( i d ) τ ( j d ) ∑ q ∣ gcd ( i , j ) μ ( q ) = ∑ d = 1 min ( n , m ) τ ( d ) ∑ q = 1 ⌊ min ( n , m ) d ⌋ μ ( q ) ∑ i = 1 ⌊ n d q ⌋ ∑ j = 1 ⌊ m d q ⌋ τ ( i d q ) τ ( j d q ) = ∑ d = 1 min ( n , m ) τ ( d ) ∑ q = 1 ⌊ min ( n , m ) d ⌋ μ ( q ) ∑ i = 1 ⌊ n d q ⌋ τ ( i d q ) ∑ j = 1 ⌊ m d q ⌋ τ ( j d q ) = ∑ d = 1 min ( n , m ) τ ( d ) ∑ q = 1 ⌊ min ( n , m ) d ⌋ μ ( q ) ∑ d q ∣ i n τ ( i ) ∑ d q ∣ j m τ ( j ) = \displaystyle\sum_{d = 1}^{\min(n, m)} \tau(d) \sum_{i = 1}^n \sum_{j = 1}^m [\gcd(i, j) = d] \tau(i) \tau(j)\\= \displaystyle\sum_{d = 1}^{\min(n, m)} \tau(d) \sum_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j = 1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i, j) = 1] \tau(id) \tau(jd)\\= \displaystyle\sum_{d = 1}^{\min(n, m)} \tau(d) \sum_{i = 1}^{\lfloor \frac{n}{d} \rfloor} \sum_{j = 1}^{\lfloor \frac{m}{d} \rfloor} \tau(id) \tau(jd) \sum_{q\ | \gcd(i, j)} \mu(q)\\= \displaystyle\sum_{d = 1}^{\min(n, m)} \tau(d) \sum_{q = 1}^{\lfloor \frac{\min(n, m)}{d} \rfloor} \mu(q) \sum_{i = 1}^{\lfloor \frac{n}{dq} \rfloor} \sum_{j = 1}^{\lfloor \frac{m}{dq} \rfloor} \tau(idq) \tau(jdq)\\= \displaystyle\sum_{d = 1}^{\min(n, m)} \tau(d) \sum_{q = 1}^{\lfloor \frac{\min(n, m)}{d} \rfloor} \mu(q) \sum_{i = 1}^{\lfloor \frac{n}{dq} \rfloor} \tau(idq) \sum_{j = 1}^{\lfloor \frac{m}{dq} \rfloor} \tau(jdq)\\= \displaystyle\sum_{d = 1}^{\min(n, m)} \tau(d) \sum_{q = 1}^{\lfloor \frac{\min(n, m)}{d} \rfloor} \mu(q) \sum_{dq\ |\ i}^n \tau(i) \sum_{dq\ |\ j}^m \tau(j) =d=1∑min(n,m)τ(d)i=1∑nj=1∑m[gcd(i,j)=d]τ(i)τ(j)=d=1∑min(n,m)τ(d)i=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]τ(id)τ(jd)=d=1∑min(n,m)τ(d)i=1∑⌊dn⌋j=1∑⌊dm⌋τ(id)τ(jd)q ∣gcd(i,j)∑μ(q)=d=1∑min(n,m)τ(d)q=1∑⌊dmin(n,m)⌋μ(q)i=1∑⌊dqn⌋j=1∑⌊dqm⌋τ(idq)τ(jdq)=d=1∑min(n,m)τ(d)q=1∑⌊dmin(n,m)⌋μ(q)i=1∑⌊dqn⌋τ(idq)j=1∑⌊dqm⌋τ(jdq)=d=1∑min(n,m)τ(d)q=1∑⌊dmin(n,m)⌋μ(q)dq ∣ i∑nτ(i)dq ∣ j∑mτ(j)
预处理 μ \mu μ 和 τ \tau τ 函数的值,然后直接计算即可。
卡特兰数就是如图从A走到B并且不穿过那根红线的方法数。
运用表述法求出了几个值。
第 n n n 个卡特兰数便是在 n × n n\times n n×n 的方格中,从左下角走到右上角的方法数。
记: C n C_{n} Cn 为第 n n n 个卡特兰数,如果我们假设 C 0 = 1 , C 1 = 1 C_0=1, C_1=1 C0=1,C1=1 那么,可得 C n + 1 = C 0 C n + C 1 C n − 1 + ⋯ + C n C 0 C_{n+1}=C_0C_n+C_1C_{n-1}+\dots+C_nC_0 Cn+1=C0Cn+C1Cn−1+⋯+CnC0,它的通项公式为 C n = ( 2 n ) ! ( n + 1 ) ! × n ! ( n ≥ 2 ) \displaystyle C_{n}=\frac{(2n)!}{(n+1)!\times n!} (n\geq2) Cn=(n+1)!×n!(2n)!(n≥2)
在一个 n × n n\times n n×n 的图形中,用n个长方体填充,没有空缺和重复,问有几种方法?
在n=3时已给出:
1 ≤ n ≤ 500 1\leq n\leq 500 1≤n≤500
解:
我们发现对于任何大小为 i i i 的树屋阶梯,都可以由左上角放一块大小为 j j j 的以及右下角放一块大小为 i − j − 1 i - j - 1 i−j−1 的树屋阶梯,再在空缺的地方由单个大块的矩形填充即可构成,这个构成的树屋阶梯一共有 ( j ) + ( i − j − 1 ) + 1 (j) + (i - j - 1) + 1 (j)+(i−j−1)+1 个钢材,正好是 i i i 个。因为 j j j 可以在 0 0 0 到 i − 1 i - 1 i−1 取且可以证明每一个构成的树屋阶梯一定各不相同,所以我们可以得到树屋阶梯方案与大小关系的递推式 f i = f i − 1 f 0 + f i − 2 f 1 … f 0 f i − 1 f_i = f_{i - 1}f_0 + f_{i - 2}f_{1}\dots f_0f_{i-1} fi=fi−1f0+fi−2f1…f0fi−1。同时,我们规定 f 0 = f 1 = 1 f_0=f_1=1 f0=f1=1。这不就是卡特兰数吗。
举个例子,我们可以怎么构成大小为 4 4 4 的树屋阶梯呢?首先有第 1 1 1 种构成方法:在左上角放上 1 1 1 个任意大小为 0 0 0 的树屋阶梯,在右下角放上 1 1 1 个任意大小为 3 3 3 的树屋阶梯,并在左下角的空缺用单个矩形填充。如图下所示:
这种构成方法下,我们能构成可行的树屋阶梯 f 0 × f 3 = 1 × 5 = 5 f_0 × f_3 = 1 × 5 = 5 f0×f3=1×5=5 个。
第 2 2 2 种构成方法:在左上角放上 1 1 1 个任意大小为 1 1 1 的树屋阶梯,在右下角放上 1 1 1 个任意大小为 2 2 2 的树屋阶梯,并在左下角的空缺用单个矩形填充。如图下所示:
这种构成方法下,我们能构成可行的树屋阶梯 f 1 × f 2 = 1 × 2 = 2 f_1 × f_2 = 1 × 2 = 2 f1×f2=1×2=2个。
类似地,还有 2 2 2 种构成方法,本质上是和上面的 2 2 2 种构成方法是一样的。所有方案数加在一起,得 f 4 = 14 f_4 = 14 f4=14,正是卡特兰数了。所以直接卡特兰通项公式一下,要使用高精。
将n个元素排成k个轮换,记作 [ n k ] \left[\begin{matrix}n\\k\end{matrix}\right] [nk],读作“ n n n 轮换 k k k”。可以把轮换想成一个环,写成 [ A , B , C , D ] [A,B,C,D] [A,B,C,D] 把它理解为 [ A , B , C , D ] = [ B , C , D , A ] = [ C , D , A , B ] = [ D , A , B , C ] [A,B,C,D]=[B,C,D,A]=[C,D,A,B]=[D,A,B,C] [A,B,C,D]=[B,C,D,A]=[C,D,A,B]=[D,A,B,C] 但是 [ A , B , C , D ] ≠ [ A , B , D , C ] ≠ [ D , C , B , A ] [A,B,C,D]\neq[A,B,D,C]\neq[D,C,B,A] [A,B,C,D]=[A,B,D,C]=[D,C,B,A]
将 4 4 4 分成两个轮换: [ 1 , 2 , 3 ] [ 4 ] , [ 1 , 2 , 4 ] [ 3 ] , [ 1 , 3 , 4 ] [ 2 ] , [ 2 , 3 , 4 ] [ 1 ] , [ 1 , 3 , 2 ] [ 4 ] , [ 1 , 4 , 2 ] [ 3 ] , [ 1 , 4 , 3 ] [ 2 ] , [ 2 , 4 , 3 ] [ 1 ] , [ 1 , 2 ] [ 3 , 4 ] , [ 1 , 3 ] [ 2 , 4 ] [1,2,3][4],[1,2,4][3],[1,3,4][2],[2,3,4][1],[1,3,2][4],[1,4,2][3],[1,4,3][2],[2,4,3][1],[1,2][3,4],[1,3][2,4] [1,2,3][4],[1,2,4][3],[1,3,4][2],[2,3,4][1],[1,3,2][4],[1,4,2][3],[1,4,3][2],[2,4,3][1],[1,2][3,4],[1,3][2,4]
∴ [ 4 2 ] = 11 \therefore \left[\begin{matrix}4\\2\end{matrix}\right]=11 ∴[42]=11
很容易看出来 [ n 1 ] = n ! n = ( n − 1 ) ! \displaystyle\left[\begin{matrix}n\\1\end{matrix}\right]=\frac{n!}{n}=(n-1)! [n1]=nn!=(n−1)!, [ n n ] = 1 \displaystyle\left[\begin{matrix}n\\n\end{matrix}\right]=1 [nn]=1,
[ n n − 1 ] = ( n 2 ) \displaystyle\left[\begin{matrix}n\\n-1\end{matrix}\right]=\left(\begin{matrix}n\\2\end{matrix}\right) [nn−1]=(n2)
给个递归式: [ n k ] = ( n − 1 ) [ n − 1 k ] + [ n − 1 k − 1 ] \left[\begin{matrix}n\\k\end{matrix}\right]=(n-1)\left[\begin{matrix}n-1\\k\end{matrix}\right]+\left[\begin{matrix}n-1\\k-1\end{matrix}\right] [nk]=(n−1)[n−1k]+[n−1k−1]
$\ \ $
$\ \ $
$\ \ $
$\ \ $
按顺序输出 [ n 0 ] , [ n 1 ] , [ n 2 ] , … , [ n n ] \begin{bmatrix}n\\ 0\end{bmatrix},\begin{bmatrix}n\\ 1\end{bmatrix},\begin{bmatrix}n\\ 2\end{bmatrix},\dots,\begin{bmatrix}n\\ n\end{bmatrix} [n0],[n1],[n2],…,[nn]的值。
1 ⩽ n < 262144 1\leqslant n < 262144 1⩽n<262144
解:
第 n n n 行第一类斯特林数的生成函数为
x n ‾ = ∏ i = 0 n − 1 ( x + i ) = ∑ i = 0 n [ n i ] x i x^{\overline n}=\prod\limits_{i=0}^{n-1}(x+i)=\sum\limits_{i=0}^n\begin{bmatrix} n\\i\end{bmatrix}x^i xn=i=0∏n−1(x+i)=i=0∑n[ni]xi
所以我们只需要求出那个连续乘积就好了
考虑倍增。
x 2 n ‾ = x n ‾ ( x + n ) n ‾ x^{\overline {2n}}=x^{\overline n}(x+n)^{\overline n} x2n=xn(x+n)n
也就是
∏ i = 0 2 n − 1 ( x + i ) = ∏ i = 0 n − 1 ( x + i ) ∏ i = 0 n − 1 ( x + n + i ) \prod\limits_{i=0}^{2n-1}(x+i)=\prod\limits_{i=0}^{n-1}(x+i)\prod\limits_{i=0}^{n-1}(x+n+i) i=0∏2n−1(x+i)=i=0∏n−1(x+i)i=0∏n−1(x+n+i)
那么只要能给定一个 n n n 次多项式 f ( x ) f(x) f(x),快速计算出 f ( x + k ) f(x+k) f(x+k) 就行。
为了方便下面表述,我们设 a i = [ x i ] f ( x ) a_i=[x^i]f(x) ai=[xi]f(x)
f ( x + k ) = ∑ i = 0 n a i ( x + k ) i = ∑ i = 0 n a i ∑ j = 0 i ( i j ) x j k i − j = ∑ i = 0 n x i ∑ j = i n ( j i ) k j − i a j = ∑ i = 0 n x i i ! ∑ j = i n k j − i ( j − i ) ! j ! a j f(x+k)=\sum\limits_{i=0}^na_i(x+k)^i\\=\sum\limits_{i=0}^na_i\sum\limits_{j=0}^i\binom{i}{j}x^jk^{i-j}\\= \sum\limits_{i=0}^nx^i\sum\limits_{j=i}^n \binom{j}{i}k^{j-i}a_j\\=\sum\limits_{i=0}^n\frac{x^i}{i!}\sum\limits_{j=i}^{n}\frac{k^{j-i}}{(j-i)!}j!a_j f(x+k)=i=0∑nai(x+k)i=i=0∑naij=0∑i(ji)xjki−j=i=0∑nxij=i∑n(ij)kj−iaj=i=0∑ni!xij=i∑n(j−i)!kj−ij!aj
这个式子是卷积,下面演示一下为什么
设 g ( x ) = ∑ i = 0 n k i i ! x n − i g(x)=\sum\limits_{i=0}^n\frac{k^i}{i!}x^{n-i} g(x)=i=0∑ni!kixn−i
h ( x ) = ∑ i = 0 n i ! a i x i h(x) = \sum\limits_{i=0}^ni!a_ix^i h(x)=i=0∑ni!aixi
那么只需要将 g ( x ) g(x) g(x) 和 h ( x ) h(x) h(x) 乘起来,然后左移n位(也就是将i次项系数变为 n + i n+i n+i 次项系数)之后,第i次都乘上 i ! i! i! 就是我们想要的 f ( x + k ) f(x+k) f(x+k) 了。
当然,倍增过程中还要有计算 x n ‾ ( x + n ) x^{\overline n}(x+n) xn(x+n) 的情况,暴力线性算一下即可。
时间复杂度 T ( n ) = T ( n / 2 ) + Θ ( n log n ) = Θ ( n log n ) T(n)=T(n/2)+\Theta(n\log n)=\Theta(n \log n) T(n)=T(n/2)+Θ(nlogn)=Θ(nlogn)
按顺序输出 [ 0 k ] , [ 1 k ] , [ 2 k ] , … , [ n k ] \begin{bmatrix}0\\ k\end{bmatrix},\begin{bmatrix}1\\ k\end{bmatrix},\begin{bmatrix}2\\ k\end{bmatrix},\dots,\begin{bmatrix}n\\ k\end{bmatrix} [0k],[1k],[2k],…,[nk] 的值。
1 ⩽ k , n < 131072 1\leqslant k,n< 131072 1⩽k,n<131072
解:
首先,我们可以对 k = 1 k=1 k=1 的情况构造指数级生成函数,即:
S ( x ) = ∑ i = 0 n ( i − 1 ) ! x i i ! S(x)=\sum_{i=0}^{n} (i-1)!\frac{x^i}{i!} S(x)=∑i=0n(i−1)!i!xi
因为很显然 [ n 1 ] = ( n − 1 ) ! \begin{bmatrix} n \\ 1\end{bmatrix}=(n-1)! [n1]=(n−1)!。
那么,我们就可以得到,对于kk为任意数情况的指数级生成函数就是 S ( x ) k k ! \displaystyle\frac{S(x)^k}{k!} k!S(x)k
除以 k ! k! k! 的主要原因是我们用指数级生成函数的环排列其实是有顺序。就比如 [ 2 , 3 , 1 ] [ 1 , 2 ] [2,3,1][1,2] [2,3,1][1,2] 和 [ 1 , 2 ] [ 2 , 3 , 1 ] [1,2][2,3,1] [1,2][2,3,1] 是等价的,但是我们算重了。
上面这个式子如果要美观一点就是:
( ln 1 1 − x ) k k ! \displaystyle\frac{(\ln \frac{1}{1-x})^k}{k!} k!(ln1−x1)k
这个可以通过泰勒展开得到。
时间复杂度: O ( n log n ) O(n\log n) O(nlogn)
将一个有 n n n 件物件的集合分成k个非空子集的方法数。记作 { n k } \left\{\begin{matrix}n\\k\end{matrix}\right\} {nk},读作 n 子集 k n子集k n子集k
举个例子:将 4 4 4 个元素的集合分为两个部分:
{ 1 , 2 , 3 } ∪ { 4 } , { 1 , 2 , 4 } ∪ { 3 } , { 1 , 3 , 4 } ∪ { 2 } , { 2 , 3 , 4 } ∪ { 1 } , { 1 , 2 } ∪ { 3 , 4 } , { 1 , 3 } ∪ { 2 , 4 } , { 1 , 4 } ∪ { 2 , 3 } \lbrace1,2,3\rbrace\cup\lbrace4\rbrace,\lbrace1,2,4\rbrace\cup\lbrace3\rbrace,\lbrace1,3,4\rbrace\cup\lbrace2\rbrace,\lbrace2,3,4\rbrace\cup\lbrace1\rbrace,\lbrace1,2\rbrace\cup\lbrace3,4\rbrace,\lbrace1,3\rbrace\cup\lbrace2,4\rbrace,\lbrace1,4\rbrace\cup\lbrace2,3\rbrace {1,2,3}∪{4},{1,2,4}∪{3},{1,3,4}∪{2},{2,3,4}∪{1},{1,2}∪{3,4},{1,3}∪{2,4},{1,4}∪{2,3}
∴ { 4 2 } = 7 \therefore \left\{\begin{matrix}4\\2\end{matrix}\right\}=7 ∴{42}=7
用容斥原理可以推出 { n k } = 1 k ! ∑ i = 0 k − 1 ( − 1 ) i ( r i ) ( r − i ) n \displaystyle\left\{\begin{matrix}n\\k\end{matrix}\right\}=\frac{1}{k!}\sum_{i=0}^{k-1}(-1)^i\left(\begin{matrix}r\\i\end{matrix}\right)(r-i)^n {nk}=k!1i=0∑k−1(−1)i(ri)(r−i)n
按顺序输出 { n 0 } , { n 1 } , { n 2 } , … , { n n } \begin{Bmatrix} n \\0 \end{Bmatrix},\begin{Bmatrix} n \\1 \end{Bmatrix},\begin{Bmatrix} n \\2 \end{Bmatrix},\dots,\begin{Bmatrix} n \\n \end{Bmatrix} {n0},{n1},{n2},…,{nn} 的值。
1 ⩽ n ⩽ 2 × 1 0 5 1\leqslant n\leqslant 2\times 10^5 1⩽n⩽2×105
解:
通项就是一个卷积式,直接预处理阶乘逆元,打快速幂板子,NTT即可.
按顺序输出 { 0 k } , { 1 k } , { 2 k } , … , { n k } \begin{Bmatrix} 0 \\k \end{Bmatrix},\begin{Bmatrix} 1 \\k \end{Bmatrix},\begin{Bmatrix} 2 \\k \end{Bmatrix},\dots,\begin{Bmatrix} n \\k \end{Bmatrix} {0k},{1k},{2k},…,{nk} 的值。
1 ⩽ k , n < 131072 1\leqslant k, n<131072 1⩽k,n<131072
解:
考虑第 k k k 列斯特林数的生成函数
F k ( x ) = ∑ i { i k } x i F_k(x) = \sum\limits_{i} \begin{Bmatrix} i \\ k \end{Bmatrix} x^i Fk(x)=i∑{ik}xi
众所周知
{ i k } = k { i − 1 k } + { i − 1 k − 1 } \begin{Bmatrix} i \\ k\end{Bmatrix} = k\begin{Bmatrix} i-1 \\ k\end{Bmatrix} + \begin{Bmatrix} i -1\\ k-1\end{Bmatrix} {ik}=k{i−1k}+{i−1k−1}
于是
F k ( x ) = ∑ i ( k { i − 1 k } + { i − 1 k − 1 } ) x i = ( ∑ i k { i − 1 k } x i ) + ( ∑ i { i − 1 k − 1 } x i ) = ( k x ∑ i { i k } x i ) + ( x ∑ i { i k − 1 } x i ) = k x F k ( x ) + x F k − 1 ( x ) \displaystyle\begin{aligned}F_k(x) &= \sum\limits_{i} \left( k\begin{Bmatrix} i-1\\k\end{Bmatrix} + \begin{Bmatrix} i-1 \\ k-1\end{Bmatrix}\right)x^i \\ &= \left(\sum\limits_{i} k\begin{Bmatrix} i-1 \\ k\end{Bmatrix}x^i \right) + \left( \sum\limits_{i} \begin{Bmatrix} i-1 \\ k-1\end{Bmatrix}x^i \right)\\&= \left(kx\sum\limits_{i} \begin{Bmatrix} i \\ k\end{Bmatrix}x^i\right) + \left(x\sum\limits_{i}\begin{Bmatrix} i\\ k-1\end{Bmatrix}x^i\right)\\&= kxF_k(x) + xF_{k-1}(x)\end{aligned} Fk(x)=i∑(k{i−1k}+{i−1k−1})xi=(i∑k{i−1k}xi)+(i∑{i−1k−1}xi)=(kxi∑{ik}xi)+(xi∑{ik−1}xi)=kxFk(x)+xFk−1(x)
移项后可以得到
F k ( x ) = x F k − 1 ( x ) 1 − k x \displaystyle F_k(x) = \frac{xF_{k-1}(x)}{1-kx} Fk(x)=1−kxxFk−1(x)
边界就是 F 0 ( x ) = 1 F_0(x) = 1 F0(x)=1
于是把上面那玩意儿一直展开下去,可以得到
F k ( x ) = x k ∏ i = 1 k ( 1 − i x ) \displaystyle F_k(x) = \frac{x^k}{\prod_{i=1}^{k} (1-ix)} Fk(x)=∏i=1k(1−ix)xk
分治乘搞出分母,然后求逆在乘上 x k x^k xk 就好了