文章目录
一个非常好的 题单。
本详解中,所有的题目的数据范围都经过了笔者的加强,而并不是原题的数据范围,这样可以促进读者更深的思考。
如果没有 @关怀他人 ,这篇文章估计永远不会发表吧。这里膜拜一下这位神仙。
前置芝士
- 多项式全家桶(多项式乘法(FFT&NTT)、求逆、除法、 ln \ln ln、 exp \exp exp、快速幂)
- 生成函数( OGF, EGF )的定义
- 组合数、微积分(泰勒展开)内容
- 推式子基本能力
- 所有初中数学内容
P6012 [数学]加强版
Description
在一个长度为 n n n 的序列中任选 k k k 个数,求所有情况中选中的数的乘积之和。
1 ≤ k ≤ n ≤ 1.2 × 1 0 5 1 \le k \le n \le 1.2 \times 10^5 1≤k≤n≤1.2×105
Solution
令 a i a_i ai 的生成函数为 F i ( x ) = 1 + a i x F_i(x)=1+a_i x Fi(x)=1+aix
所以答案为 [ x k ] ∏ i = 1 n F i ( x ) [x^k] \prod_{i=1}^n F_i(x) [xk]i=1∏nFi(x)
我们分治NTT即可。由于出题人并不良心,模数为
1
0
9
+
7
10^9+7
109+7 ,所以我们不得不采用任意模数多项式乘法。一起喷吧
Code
咕咕咕
P4841 [集训队作业2013]城市规划
Description
求 n n n 个点的有标号无向连通图的数量。答案对 1004535809 1004535809 1004535809 取模。
n ≤ 1 0 6 n \le 10^6 n≤106 ,时限 2 s 2s 2s 。
Solution
看到这样的神奇模数,不难想到这是一道毒瘤多项式题。
定义 n n n 个点的有标号无向图的数量为 f ( n ) f(n) f(n) 。显然有 f ( n ) = 2 C n 2 f(n)=\text 2^{C_n^2} f(n)=2Cn2
n
n
n 个点的有标号无向连通图的数量
g
(
n
)
g(n)
g(n) 满足
∑
i
=
1
n
C
n
−
1
i
−
1
g
(
i
)
f
(
n
−
i
)
=
f
(
n
)
\sum_{i=1}^{n} C_{n-1}^{i-1}\ g(i) f(n-i)=f(n)
i=1∑nCn−1i−1 g(i)f(n−i)=f(n)
这个式子中 i i i 的实际意义为 1 1 1 号节点所在连通块的大小, C n − 1 i − 1 C_{n-1}^{i-1} Cn−1i−1表示钦定了 i − 1 i-1 i−1 个与 1 1 1 连通的节点。
我们拆开组合数,得到 ∑ i = 1 n g ( i ) ( i − 1 ) ! f ( n − i ) ( n − i ) ! = f ( n ) ( n − 1 ) ! \sum_{i=1}^n \frac {g(i)} {(i-1)!} \frac {f(n-i)} {(n-i)!}=\frac {f(n)} {(n-1)!} i=1∑n(i−1)!g(i)(n−i)!f(n−i)=(n−1)!f(n)
令 g ′ ( i ) = g ( i ) ( i − 1 ) ! g'(i)=\frac {g(i)} {(i-1)!} g′(i)=(i−1)!g(i)
f ′ ( i ) = f ( i ) i ! f'(i)=\frac {f(i)} {i!} f′(i)=i!f(i)
f ′ ′ ( i ) = f ( i ) ( i − 1 ) ! f''(i)=\frac {f(i)} {(i-1)!} f′′(i)=(i−1)!f(i)
令
G
′
,
F
′
,
F
′
′
G',F',F''
G′,F′,F′′分别为
g
′
,
f
′
,
f
′
′
g',f',f''
g′,f′,f′′ 的 OGF ,显然有
F
′
′
=
F
′
G
′
F''=F'G'
F′′=F′G′
即 G ′ = F ′ ′ × ( F ′ ) − 1 G'=F'' \times (F')^{-1} G′=F′′×(F′)−1
多项式求逆+多项式乘 即可求出 G ′ G' G′,从而我们也就得到了 G G G 。
时间复杂度 O ( n log n ) O(n \log n) O(nlogn) 。
Code
CF438E The Child and Binary Tree
Description
给定一个长度为 n n n 的正整数序列 A A A 。
一个二叉树可爱当且仅当这个二叉树上所有节点的点权都来自于 A A A 。
定义一棵二叉树的权值为这棵二叉树的所有节点的点权之和。
对于每个 i ∈ [ 1 , m ] i \in [1,m] i∈[1,m] ,分别求出权值为 i i i 的不同可爱二叉树的数量。答案对 998244353 998244353 998244353 取模。
n ≤ 1 0 6 , 1 ≤ A i , m ≤ 1 0 6 n \le 10^6, 1 \le A_i, m \le 10^6 n≤106,1≤Ai,m≤106 ,时限 2 s 2s 2s 。
Solution
令
f
(
i
)
f(i)
f(i) 表示权值为
i
i
i 个可爱二叉树的数量,
g
(
i
)
=
[
i
∈
A
]
g(i)=[i \in A]
g(i)=[i∈A](即
i
i
i 是否在序列
A
A
A 中)。不难发现递推式
f
(
i
)
=
∑
j
=
1
m
[
j
∈
A
]
∑
k
=
0
i
−
j
f
(
k
)
f
(
i
−
j
−
k
)
f(i)=\sum_{j=1}^m [j \in A] \sum_{k=0}^{i-j} f(k)f(i-j-k)
f(i)=j=1∑m[j∈A]k=0∑i−jf(k)f(i−j−k)
令
F
,
G
F,G
F,G 分别为
f
,
g
f,g
f,g 的 OGF ,那么
F
=
F
2
G
+
1
F=F^2G+1
F=F2G+1
大力解一元二次方程,得 F ( x ) = 1 ± 1 − 4 G 2 G F(x)=\frac {1 \ ± \ \sqrt {1-4G}} {2G} F(x)=2G1 ± 1−4G
由于生成函数的 0 0 0 次项应为 1 1 1 ,所以应取 − - − 。
但是,这个式子很难计算,因为 2 G 2G 2G 的常数项的系数可能是 0 0 0 ,这导致我们无法使用多项式求逆,而且分治NTT也被卡掉了。所以,我们不得不整理这个式子,使得需要求逆的部分的常数项一定不为 0 0 0 。
上下同乘
1
+
1
−
4
G
1+\sqrt {1-4G}
1+1−4G 得
F
(
x
)
=
2
1
−
4
G
F(x)=\frac {2} {\sqrt {1-4G}}
F(x)=1−4G2
多项式开根+多项式求逆即可。
时间复杂度 O ( n log n ) O(n \log n) O(nlogn) 。
Code
P4451 [国家集训队]整数的lqp拆分
Description
给定 n n n,求 ∑ ∑ j = 1 m a j = n , a j ∈ N ∗ ∏ i = 1 m f a i \sum_{\sum_{j=1}^m a_j=n, a_j \in N^*} \prod_{i=1}^m f_{a_i} ∑∑j=1maj=n,aj∈N∗∏i=1mfai 。这里 f f f 为斐波那契数列 , f i f_i fi 表示斐波那契数列的第 i i i 项。
n ≤ 1 0 1 0 7 n \le 10^{10^7} n≤10107,时限 1 s 1s 1s 。
Solution
一道套路题。
令
g
i
g_i
gi 表示当
n
=
i
n=i
n=i 时的答案,那么不难得到
g
i
=
∑
j
=
1
i
f
j
g
i
−
j
g_i=\sum_{j=1}^{i} f_j\ g_{i-j}
gi=j=1∑ifj gi−j
直接递推是 O ( n 2 ) O(n^2) O(n2) 的,使用分治 NTT 是 O ( n log 2 n ) O(n \log^2 n) O(nlog2n) 的。
考虑优化。令 F , G F,G F,G 分别为 f , g f,g f,g 的 OGF ,那么显然有 G = F G + 1 G=FG+1 G=FG+1 。
不难发现 F F F 的闭形式为 x 1 − x − x 2 \frac {x} {1-x-x^2} 1−x−x2x。
( 1 − F ) G = 1 (1-F)G=1 (1−F)G=1
从而, G = 1 1 − F = 1 1 − 2 x − x 2 1 − x − x 2 = − 1 − x − x 2 1 − 2 x − x 2 = 1 + x 1 − 2 x − x 2 G=\frac 1 {1-F}=\frac 1 {\frac {1-2x-x^2} {1-x-x^2}}=-\frac {1-x-x^2} {1-2x-x^2}=1+\frac {x} {1-2x-x^2} G=1−F1=1−x−x21−2x−x21=−1−2x−x21−x−x2=1+1−2x−x2x
然后我们套路地展开这个式子,从而得到了第
n
n
n 项的系数为
2
4
[
(
1
+
2
)
n
−
(
1
−
2
)
n
]
\frac {\sqrt 2} 4[(1+\sqrt 2)^n-(1-\sqrt 2)^n]
42[(1+2)n−(1−2)n]
在模意义下 2 \sqrt 2 2 为 59713600 59713600 59713600 或 940286407 940286407 940286407 ,直接带入即可。
根据费吗小定理,指数可以对 m o d − 1 mod-1 mod−1 取模;于是我们一边读入一边取模即可。最后做快速幂即可得到答案。
时间复杂度 O ( log 10 n ) O(\log_{10} n) O(log10n) 。
Code
CF891E Lust
Description
有 n n n 个数,每次可以等概率地选择一个数,将它减一并将答案加上此时除这个数外的其他数之积。求最终答案的期望。
1 ≤ n ≤ 1 0 5 , 1 ≤ k ≤ 1 0 9 1 \le n \le 10^5,1 \le k \le 10^{9} 1≤n≤105,1≤k≤109
Solution
答案即为初始时所有数的乘积减去所有操作结束后,所有数的乘积的期望值。
所以现在的关键在于如何快速计算出后者。
给每一个 a i a_i ai 一个指数生成函数: F i ( x ) = ∑ j = 0 k ( a i − j ) x j j ! F_i(x)=\sum_{j=0}^k (a_i-j)\frac {x^j}{j!} Fi(x)=∑j=0k(ai−j)j!xj。这样一来,所有 F i ( x ) F_i(x) Fi(x) 的乘积的 x k x^k xk 项的系数即为答案。
可惜本题中 k k k 较大,不能直接进行分治NTT。这启示我们对上面的 EGF 进行一些转化。
F i ( x ) = ∑ j = 0 k ( a i − j ) x j j ! F_i(x)=\sum_{j=0}^k (a_i-j)\frac {x^j}{j!} Fi(x)=j=0∑k(ai−j)j!xj
拆开括号得
F i ( x ) = ∑ j = 0 k a i x j j ! − ∑ j = 0 k j x j j ! F_i(x)=\sum_{j=0}^k a_i \frac {x^j} {j!}-\sum_{j=0}^k j \frac {x^j} {j!} Fi(x)=j=0∑kaij!xj−j=0∑kjj!xj
根据EGF的定义不难得到
F i ( x ) = a i × e x − x × e x F_i(x)=a_i \times e^x-x \times e^x Fi(x)=ai×ex−x×ex
F i ( x ) = ( a i − x ) e x F_i(x)=(a_i-x)e^x Fi(x)=(ai−x)ex
所以,所有
F
i
(
x
)
F_i(x)
Fi(x) 的乘积就是
e
n
x
∏
i
=
1
n
(
a
i
−
x
)
e^{nx}\prod_{i=1}^n (a_i-x)
enxi=1∏n(ai−x)
这个式子的右半部分可以采用分治NTT直接计算。由于本题只要求第 x k x^k xk 项的系数,所以直接线性求就好了。
现在剩下一个问题: e n x e^{nx} enx 的各项系数中带有阶乘,无法快速求出。
此时一种方法是写一个又臭又长的快速阶乘算法,但是并没有必要。我们可以在另一个程序中打表求出 0 ! , ( 1 0 7 ) ! , ( 2 × 1 0 7 ) ! ⋯ 0!\ , \ (10^7)!\ , \ (2 \times 10^7)! \cdots 0! , (107)! , (2×107)!⋯ ;在我们将要提交的程序中,将这个表复制粘贴进去,运行时先在 O ( 1 0 7 ) O(10^7) O(107) 的时间复杂度内求出 ( k − n ) ! (k-n)! (k−n)! 再线性递推即可。
时间复杂度 O ( n log n + 1 0 7 ) O(n \log n+10^7) O(nlogn+107) 。
P4491 [HAOI2018]染色
本题与生成函数无关,可是笔者脑抽了。
Description
为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 n n n 的序列, 每个位置都可以被染成 m m m 种颜色中的某一种.
然而小 C 只关心序列的 n n n 个位置中出现次数恰好为 s s s 的颜色种数, 如果恰好出现了 S S S 次的颜色有 k k k 种, 则小 C 会产生 w k w_k wk 的愉悦度.
小 C 希望知道对于所有可能的染色方案, 他能获得的愉悦度的和对 1004535809 1004535809 1004535809 取模的结果是多少。
1 ≤ n ≤ 1 0 7 , 1 ≤ m ≤ 1 0 5 , 1 ≤ s ≤ 150 1 \le n \le 10^7, 1 \le m \le 10^5, 1 \le s \le 150 1≤n≤107,1≤m≤105,1≤s≤150
Solution
令
f
i
f_i
fi 表示钦定了
i
i
i 种恰好出现
S
S
S 次的颜色的方案数。不难发现
f
i
=
C
m
i
(
m
−
i
)
(
n
−
i
s
)
∏
j
=
0
i
−
1
C
n
−
j
s
s
f_i=C_m^i (m-i)^{(n-is)}\prod_{j=0}^{i-1} C_{n-js}^s
fi=Cmi(m−i)(n−is)j=0∏i−1Cn−jss
令
g
i
g_i
gi 表示恰好有
i
i
i 种出现
S
S
S 次的颜色的方案数。不难发现
f
i
=
∑
j
=
i
n
C
j
i
g
j
f_i=\sum_{j=i}^{n} C_j^i\ g_j
fi=j=i∑nCji gj
我们可以一边枚举
i
i
i 一边更新
∏
j
=
0
i
−
1
C
n
−
j
s
s
\prod_{j=0}^{i-1} C_{n-js}^s
∏j=0i−1Cn−jss,从而
f
f
f 可以
O
(
n
)
O(n)
O(n) 求出。然后,我们二项式反演,即可得到
g
i
=
∑
j
=
i
n
(
−
1
)
j
−
i
C
j
i
f
j
g_i=\sum_{j=i}^n (-1)^{j-i} C_j^i f_j
gi=j=i∑n(−1)j−iCjifj
拆开组合数即可得到卷积的形式。于是做一遍NTT即可。
时间复杂度 O ( n + m log m ) O(n+m \log m) O(n+mlogm) 。
P4389 付公主的背包
Description
神 N aCly_Fish \color {black} \text {N} \color {red} \text {aCly\_Fish} NaCly_Fish有 n n n 种商品,第 i i i 个商品大小为 v i v_i vi 且有无限件。她还有一个可爱的大小为 1 0 5 10^5 105 的背包。她想要知道,对于 s = 0 , 1 , 2 ⋯ m s=0,1,2 \cdots m s=0,1,2⋯m ,在背包中恰好装 s s s 体积的方案数。
她在 1 0 − 998244353 10^{-998244353} 10−998244353 秒内就把这题切了,你能打破这个记录吗? 每个答案都要对 998244353 998244353 998244353 取模哦。
1 ≤ n , m ≤ 1 0 6 , 1 ≤ v i ≤ m 1 \le n,m \le 10^6, 1 \le v_i \le m 1≤n,m≤106,1≤vi≤m,时限 2 s 2s 2s 。
Solution
你强归你强, N aCly_Fish \color {black} \text {N} \color {red} \text {aCly\_Fish} NaCly_Fish比你强。
考虑第 i i i 个物品的生成函数的各项系数应为 { 1 , 0 , 0 ⋯ 0 , 1 , 0 , 0 ⋯ 0 , 1 , 0 ⋯ } \{1,0,0 \cdots 0,1,0,0 \cdots 0,1,0 \cdots \} {1,0,0⋯0,1,0,0⋯0,1,0⋯}。它的闭形式是 1 1 − x v i \frac {1} {1-x^{v_i}} 1−xvi1 。
如果我们暴力地直接将这些多项式相乘再求逆,那么时间复杂度并不正确。不难发现,这些分式相乘的分子是 1 1 1 ,分母是 ∏ i = 1 n ( 1 − x v i ) \prod_{i=1}^n (1-x^{v_i}) ∏i=1n(1−xvi) 。
考虑化乘为加。
∏ i = 1 n ( 1 − x v i ) = e ln ( ∏ i = 1 n ( 1 − x v i ) ) = e ∑ i = 1 n ln ( 1 − x v i ) \prod_{i=1}^n (1-x^{v_i})=e^{\ln (\prod_{i=1}^n (1-x^{v_i}))}=e^{\sum_{i=1}^n \ln (1-x^{v_i})} i=1∏n(1−xvi)=eln(∏i=1n(1−xvi))=e∑i=1nln(1−xvi)
所以现在关键在于求出 ∑ i = 1 n ln ( 1 − x v i ) \sum_{i=1}^n \ln ({1-x^{v_i}}) ∑i=1nln(1−xvi) 。
下面开始秀了。
令 F ( x ) = 1 − x v F(x)=1-x^{v} F(x)=1−xv, G ( x ) = ln F ( x ) G(x)=\ln F(x) G(x)=lnF(x) ,那么
ln F ( x ) = G ( x ) \ln F(x)=G(x) lnF(x)=G(x)
F ( x ) ′ F ( x ) = G ′ ( x ) \frac {F(x)'} {F(x)}=G'(x) F(x)F(x)′=G′(x)
− v x v − 1 1 − x v = G ′ ( x ) \frac {-vx^{v-1}} {1-x^v}=G'(x) 1−xv−vxv−1=G′(x)
− v x v − 1 1 1 − x v = G ′ ( x ) -v x^{v-1} \frac {1} {1-x^v}=G'(x) −vxv−11−xv1=G′(x)
− v ∑ i = 0 ∞ x v i + v − 1 = G ′ ( x ) -v \sum_{i=0}^{∞} x^{vi+v-1}=G'(x) −vi=0∑∞xvi+v−1=G′(x)
− v ∑ i = 0 ∞ x v i + v v i + v = G ( x ) + C -v \sum_{i=0}^{∞} \frac {x^{vi+v}} {vi+v}=G(x)+C −vi=0∑∞vi+vxvi+v=G(x)+C
− ∑ i = 0 ∞ x ( i + 1 ) v i + 1 = G ( x ) -\sum_{i=0}^{∞} \frac {x^{(i+1)v}} {i+1}=G(x) −i=0∑∞i+1x(i+1)v=G(x)
− ∑ i = 1 ∞ x i v i = G ( x ) -\sum_{i=1}^{∞} \frac {x^{iv}} {i}=G(x) −i=1∑∞ixiv=G(x)
带入原式得
∑ i = 1 n ln ( 1 − x v i ) \sum_{i=1}^n \ln ({1-x^{v_i}}) i=1∑nln(1−xvi)
≡ ∑ i = 1 n ∑ j = 1 ∞ x v i j j \equiv \sum_{i=1}^n \sum_{j=1}^{∞} \frac {x^{v_ij}} {j} ≡i=1∑nj=1∑∞jxvij
≡ ∑ j = 1 m 1 j ∑ i = 1 ⌊ m j ⌋ x i j c n t i ( m o d m ) \equiv \sum_{j=1}^m \frac 1 j \sum_{i=1}^{\lfloor \frac m j \rfloor} x^{ij} cnt_{i} (mod\ m) ≡j=1∑mj1i=1∑⌊jm⌋xijcnti(mod m)
这里 c n t i cnt_i cnti 表示在原序列中值为 i i i 的数的数量。
显然这个式子可以在调和级别的时间复杂度内求出。然后 exp \exp exp 回去即可得到答案。
时间复杂度 O ( m log m ) O(m \log m) O(mlogm) 。牛逼题。
P4705 玩游戏
Description
Alice 和 Bob 又在玩游戏。
对于一次游戏,首先 Alice 获得一个长度为 n n n 的序列 A A A,Bob 获得一个长度为 m m m 的序列 B B B。之后他们各从自己的序列里随机取出一个数,分别设为 A x , B y A_x,B_y Ax,By ,那么这次游戏的 k k k 次价值为 ( A x + B y ) k (A_x+B_y)^k (Ax+By)k。
由于他们发现这个游戏实在是太无聊了,所以想让你帮忙计算对于 i = 1 , 2 ⋯ ⋯ t i=1,2 \cdots \cdots t i=1,2⋯⋯t,一次游戏 i i i 次价值的期望是多少。
由于答案可能很大,只需要求出答案在模 998244353 998244353 998244353 意义下的值即可。
1 ≤ n , m , t ≤ 1 0 5 , 1 ≤ A i , B i ≤ 1 0 9 1 \le n,m,t \le 10^5, 1 \le A_i,B_i \le 10^9 1≤n,m,t≤105,1≤Ai,Bi≤109
Solution
根据期望的定义,第
k
k
k 个答案为
∑
i
=
1
n
∑
j
=
i
+
1
n
(
A
i
+
B
j
)
k
n
m
\frac {\sum_{i=1}^n \sum_{j=i+1}^n (A_i+B_j)^k} {nm}
nm∑i=1n∑j=i+1n(Ai+Bj)k
于是现在关键在于,对于 k = 0 , 1 , 2 ⋯ t k=0,1,2 \cdots t k=0,1,2⋯t求出 ∑ i = 1 n ∑ j = 1 n ( A i + B j ) k \sum_{i=1}^n \sum_{j=1}^n (A_i+B_j)^k i=1∑nj=1∑n(Ai+Bj)k
首先二项式展开得 ∑ i = 1 n ∑ j = i + 1 n ∑ p = 0 k C k p A i p B j k − p \sum_{i=1}^n \sum_{j=i+1}^n \sum_{p=0}^k C_k^p A_i^p B_j^{k-p} i=1∑nj=i+1∑np=0∑kCkpAipBjk−p、
交换求和号得 ∑ p = 0 k C k p ( ∑ i = 1 n A i p ) ( ∑ j = 1 n B j k − p ) \sum_{p=0}^k C_k^p (\sum_{i=1}^n A_i^p) (\sum_{j=1}^n B_j^{k-p}) p=0∑kCkp(i=1∑nAip)(j=1∑nBjk−p)
令 f ( x ) = ∑ i = 1 n A i x , g ( x ) = ∑ i = 1 n B i x f(x)=\sum_{i=1}^n A_i^x,\ g(x)=\sum_{i=1}^n B_i^x f(x)=∑i=1nAix, g(x)=∑i=1nBix,带入得
∑ p = 0 k C k p f ( p ) g ( k − p ) \sum_{p=0}^k C_k^p\ f(p)\ g(k-p) p=0∑kCkp f(p) g(k−p)
展开组合数得
k ! ∑ p = 0 k ( 1 p ! f ( p ) ) ( 1 ( k − p ) ! g ( k − p ) ) k!\sum_{p=0}^k (\frac 1 {p!}f(p))\ (\frac 1 {(k-p)!} g({k-p})) k!p=0∑k(p!1f(p)) ((k−p)!1g(k−p))
这是一个卷积的形式,直接NTT即可。于是现在关键在于求出 f , g f,g f,g 。由于 f , g f,g f,g 函数的求法基本相同,所以下文用 f f f 为例。
令 A i A_i Ai 的生成函数为 1 1 − A i x \frac 1 {1-A_ix} 1−Aix1,那么 f ( k ) = [ x k ] ∑ i = 1 n 1 1 − A i x f(k)=[x^k] \sum_{i=1}^n \frac 1 {1-A_ix} f(k)=[xk]i=1∑n1−Aix1
直接通分+暴力加减是 O ( n 2 ) O(n^2) O(n2)的。
根据
ln
(
F
(
x
)
)
′
=
F
(
x
)
′
F
(
x
)
\ln(F(x))'=\frac {F(x)'} {F(x)}
ln(F(x))′=F(x)F(x)′
不难得到
(
∑
i
=
1
n
ln
(
1
−
A
i
x
)
′
)
=
∑
i
=
1
n
−
A
i
1
−
A
i
x
(\sum_{i=1}^n \ln({1-A_ix})')=\sum_{i=1}^n \frac {-A_i} {1-A_ix}
(i=1∑nln(1−Aix)′)=i=1∑n1−Aix−Ai
令
F
(
x
)
=
∑
i
=
1
n
1
1
−
A
i
x
F(x)=\sum_{i=1}^n \frac 1 {1-A_ix}
F(x)=i=1∑n1−Aix1
G
(
x
)
=
∑
i
=
1
n
−
A
i
1
−
A
i
x
G(x)=\sum_{i=1}^n \frac {-A_i} {1-A_ix}
G(x)=i=1∑n1−Aix−Ai
因为
−
A
i
1
−
A
i
x
(
−
x
)
+
1
=
1
1
−
A
i
x
\frac {-A_i} {1-A_ix}(-x)+1=\frac 1 {1-A_ix}
1−Aix−Ai(−x)+1=1−Aix1
所以
F
(
x
)
=
−
x
G
(
x
)
+
n
F(x)=-xG(x)+n
F(x)=−xG(x)+n
现在的关键在于求出 G G G。
根据 F ( x ) ′ + G ( x ) ′ = ( F ( x ) + G ( x ) ) ’ F(x)'+G(x)'=(F(x)+G(x))’ F(x)′+G(x)′=(F(x)+G(x))’,不难得到
G ( x ) = ( ∑ i = 1 n ln ( 1 − A i x ) ) ′ G(x)=(\sum_{i=1}^n \ln(1-A_ix))' G(x)=(i=1∑nln(1−Aix))′
根据 ln ( x ) + ln ( y ) = ln ( x y ) \ln(x)+\ln(y)=\ln(xy) ln(x)+ln(y)=ln(xy),显然有
G ( x ) = ln ( ∏ i = 1 n ( 1 − A i x ) ) ′ G(x)=\ln(\prod_{i=1}^n (1-A_ix))' G(x)=ln(i=1∏n(1−Aix))′
于是我们分治NTT求出 ∏ i = 1 n ( 1 − A i x ) \prod_{i=1}^n (1-A_ix) ∏i=1n(1−Aix),然后多项式求 ln \ln ln再求导即可。
瓶颈在于分治NTT,时间复杂度为 O ( n log 2 n ) O(n \log^2 n) O(nlog2n)。
实际上,本题的理论复杂度可以做到 O ( n log n ) O(n \log n) O(nlogn) 。这留给学有余力的读者思考。
P5748 集合划分计数
Description
一个有 n n n 个元素的集合,将其分为任意个非空子集,求方案数。由于答案可能会很大,所以要对 998244353 998244353 998244353 取模。
Q Q Q 次询问, 1 ≤ n ≤ 1 0 5 , 1 ≤ Q ≤ 1 0 3 1 \le n \le 10^5,1 \le Q \le 10^3 1≤n≤105,1≤Q≤103 。
Solution
令 B i B_i Bi 表示当 n = i n=i n=i 时的答案。不难发现
B i = ∑ j = 1 i C i − 1 j − 1 B i − j B_i=\sum_{j=1}^i C_{i-1}^{j-1} B_{i-j} Bi=j=1∑iCi−1j−1Bi−j
把式子化成好看一点的形式
B i + 1 = ∑ j = 0 i C i j B j B_{i+1}=\sum_{j=0}^{i} C_{i}^{j} B_{j} Bi+1=j=0∑iCijBj
∑ i = 0 ∞ B i + 1 = ∑ i = 0 ∞ ∑ j = 0 i C i j B j \sum_{i=0}^{∞} B_{i+1}=\sum_{i=0}^{∞} \sum_{j=0}^i C_i^j B_j i=0∑∞Bi+1=i=0∑∞j=0∑iCijBj
令 F ( x ) F(x) F(x) 为 B B B 的EGF,那么不难发现
B ( x ) ′ = e x B ( x ) B(x)'=e^x B(x) B(x)′=exB(x)
考虑解这个微分方程。移项得
B ( x ) ′ B ( x ) = e x \frac {B(x)'} {B(x)}=e^x B(x)B(x)′=ex
两边同时积分,
ln ( B ( x ) ) = e x + C \ln(B(x))=e^x+C ln(B(x))=ex+C
考虑当 x = 0 x=0 x=0 时,左式为 ln 1 = 0 \ln 1 =0 ln1=0 ,而右侧的 e x = 1 e^x=1 ex=1 ,所以 C C C 为 − 1 -1 −1 。带入得
ln ( B ( x ) ) = e x − 1 \ln(B(x))=e^x-1 ln(B(x))=ex−1
然后两边同时 exp \exp exp 一下,得到
B ( x ) = e e x − 1 B(x)=e^{e^x-1} B(x)=eex−1
于是我们做两遍多项式 exp \exp exp 即可预处理出所有的 B B B ,每次询问 O ( 1 ) O(1) O(1) 查询即可。
时间复杂度 O ( n log n ) O(n \log n) O(nlogn) 。
P4463 calc加强版
Description
令 f ( x , y ) f(x,y) f(x,y) 表示在 [ 1 , x ] [1,x] [1,x] 中任选 y y y 个数的乘积之和。
给定 m , n m,n m,n ,请对于每一个在 [ 1 , n ] [1,n] [1,n] 的 x x x ,求出 f ( m , x ) f(m,x) f(m,x) 。
每个答案都需要对 998244353 998244353 998244353 取模。
对于 100 % 100\% 100% 的数据满足, 1 ≤ m ≤ k < 998244353 1 \le m \le k < 998244353 1≤m≤k<998244353 。
Solution
不难发现
f ( n , m ) = [ x m ] ∏ i = 1 n ( 1 + i x ) f(n,m)=[x^m]\prod_{i=1}^n (1+ix) f(n,m)=[xm]i=1∏n(1+ix)
注意题目中的 n n n 很大,直接暴力分治 NTT 的话会爆炸。
我们套路地用 ln \ln ln 化乘为加:
∏ i = 1 m ( 1 + i x ) \prod_{i=1}^m (1+ix) i=1∏m(1+ix)
= exp ( ln ( ∏ i = 1 m ( 1 + i x ) ) ) =\exp \left(\ln \left(\prod_{i=1}^m (1+ix) \right) \right) =exp(ln(i=1∏m(1+ix)))
= exp ( ∑ i = 1 m ln ( 1 + i x ) ) =\exp \left(\sum_{i=1}^m \ln(1+ix) \right) =exp(i=1∑mln(1+ix))
考虑展开 ln ( 1 + i x ) \ln(1+ix) ln(1+ix) 。我们将 i x ix ix 看做一个整体。
为了方便叙述,令 A ( x ) = ln ( 1 + p ) A(x)=\ln( 1+p) A(x)=ln(1+p) 。
ln ( 1 + p ) = A ( x ) \ln(1+p)=A(x) ln(1+p)=A(x)
ln ′ ( 1 + p ) = A ′ ( x ) \ln'(1+p)=A'(x) ln′(1+p)=A′(x)
1 1 + p = A ′ ( x ) \frac {1} {1+p}=A'(x) 1+p1=A′(x)
∑ j = 0 ∞ ( − p ) j = A ′ ( x ) \sum_{j=0}^{∞}(-p)^j=A'(x) j=0∑∞(−p)j=A′(x)
( ∑ j = 1 ∞ ( − p ) j j ) + C = A ( x ) \left(\sum_{j=1}^{∞} \frac {(-p)^j} {j}\right)+C=A(x) (j=1∑∞j(−p)j)+C=A(x)
由于当 p = 0 p=0 p=0 时, ∑ j = 1 ∞ ( − p ) j j = 0 \sum_{j=1}^{∞} \frac {(-p)^j} {j}=0 ∑j=1∞j(−p)j=0, A ( x ) = 0 A(x)=0 A(x)=0 ,所以 C = 0 C=0 C=0 。从而得到:
A ( x ) = ∑ j ≥ 1 ( − 1 ) j j p j A(x)=\sum_{j \ge 1} \frac {(-1)^j} {j} p^j A(x)=j≥1∑j(−1)jpj
带回原式
exp ( ∑ i = 1 m ln ( 1 + i x ) ) \exp \left(\sum_{i=1}^m \ln(1+ix) \right) exp(i=1∑mln(1+ix))
= exp ( ∑ i = 1 m ∑ j ≥ 1 ( − 1 ) j j ( i x ) j ) =\exp \left (\sum_{i=1}^m \sum_{j \ge 1} \frac {(-1)^j} {j} (ix)^j \right) =exp(i=1∑mj≥1∑j(−1)j(ix)j)
= exp ( ∑ j ≥ 1 ( − 1 ) j j ∑ i = 1 m ( i x ) j ) =\exp \left (\sum_{j \ge 1}\frac {(-1)^j} {j} \sum_{i=1}^m (ix)^j \right) =exp(j≥1∑j(−1)ji=1∑m(ix)j)
= exp ( ∑ j ≥ 1 ( − 1 ) j ( j − 1 ) ! ∑ i = 1 m ( i x ) j j ! ) =\exp \left (\sum_{j \ge 1} (-1)^j (j-1)!\sum_{i=1}^m \frac {(ix)^j} {j!} \right) =exp(j≥1∑(−1)j(j−1)!i=1∑mj!(ix)j)
令 F ( x ) = ∑ j ≥ 0 ∑ i = 1 m ( i x ) j j ! F(x)=\sum_{j \ge 0} \sum_{i=1}^m \frac {(ix)^j} {j!} F(x)=j≥0∑i=1∑mj!(ix)j
[ x n ] G ( x ) = [ x n ] F ( x ) ⋅ ( − 1 ) n − 1 ( n − 1 ) ! [x^n]G(x)=[x^n]F(x) \cdot (-1)^{n-1}(n-1)! [xn]G(x)=[xn]F(x)⋅(−1)n−1(n−1)!
a n s ( x ) = exp ( G ( x ) ) ans(x)=\exp \left(G(x) \right) ans(x)=exp(G(x))
我们通过 F F F 求出 G G G ,再对 G G G 做一遍 exp \exp exp 得到多项式 a n s ans ans 。 a n s ans ans 的各项系数即为答案。
现在关键在于求出 F ( x ) F(x) F(x) 。
F ( x ) = ∑ j ≥ 0 ∑ i = 1 m ( i x ) j j ! F(x)=\sum_{j \ge 0} \sum_{i=1}^m \frac {(ix)^j} {j!} F(x)=j≥0∑i=1∑mj!(ix)j
= ∑ j ≥ 0 e j x =\sum_{j \ge 0} e^{jx} =j≥0∑ejx
注意到我们只需要前 m m m 项的系数,于是
∑ j = 0 m e j x \sum_{j=0}^m e^{jx} j=0∑mejx
= e m x − 1 1 − e − x =\frac {e^{mx}-1} {1-e^{-x}} =1−e−xemx−1
注意这个分式的上下两部分的常数项都为 0 0 0 ,于是我们要将它们先全部除以 x x x (即将系数全部左移一位)再做不带余除法。
时间复杂度 O ( m log m ) O(m \log m) O(mlogm) 。注意 exp \exp exp 的常数很大,可能需要卡常。
P7289 [EZEC-5]Chasse Neige
最后来一道神仙题。
Description
时限
0.4
s
0.4s
0.4s,空限
256
M
B
256MB
256MB。
Solution
Part 1: 朴素dp, O ( n 2 ) O(n^2) O(n2)
状态设计:
①
A
i
,
j
A_{i,j}
Ai,j:满足
π
1
≤
π
2
,
π
n
−
1
≥
π
n
\pi_1 \le \pi_2,\ \pi_{n-1} \ge \pi_{n}
π1≤π2, πn−1≥πn 且有
k
k
k 个峰的排列数量;
②
B
i
,
j
B_{i,j}
Bi,j:满足
π
1
≤
π
2
,
π
n
−
1
≤
π
n
\pi_1 \le \pi_2,\ \pi_{n-1} \le \pi_{n}
π1≤π2, πn−1≤πn 且有
k
k
k 个峰的排列数量;
③
C
i
,
j
C_{i,j}
Ci,j:满足
π
1
≥
π
2
,
π
n
−
1
≤
π
n
\pi_1 \ge \pi_2,\ \pi_{n-1} \le \pi_{n}
π1≥π2, πn−1≤πn 且有
k
k
k 个峰的排列数量;
④
D
i
,
j
D_{i,j}
Di,j:满足
π
1
≥
π
2
,
π
n
−
1
≥
π
n
\pi_1 \ge \pi_2,\ \pi_{n-1} \ge \pi_{n}
π1≥π2, πn−1≥πn 且有
k
k
k 个峰的排列数量。
状态意义:
如下图。从上到下,从左到右分别表示 A , B , C , D A,B,C,D A,B,C,D。蓝点表示一个峰。
状态转移:
首先思考状态与状态之间比较显然的联系。
①
B
i
,
j
=
C
i
,
j
B_{i,j}=C_{i,j}
Bi,j=Ci,j
②
A
i
,
j
=
D
i
,
j
−
1
A_{i,j}=D_{i,j-1}
Ai,j=Di,j−1
①: 考虑将 B B B旋转 180 ° 180 \degree 180°可以得到 C C C。根据 B , C B,C B,C的状态设计,不难发现翻转后峰的数量不变,即 B i , j = C i , j B_{i,j}=C_{i,j} Bi,j=Ci,j。
②考虑将 A A A旋转 180 ° 180 \degree 180°可以得到 D D D。根据 A , D A,D A,D的状态设计,不难发现翻转后峰的数量减去了 1 1 1,即 A i , j = D i , j − 1 A_{i,j}=D_{i,j-1} Ai,j=Di,j−1。
然后状态与状态之间较为复杂的联系。
考虑上一秒钟,排列 π \pi π的长度为 i i i,形如 A / B / C / D A/B/C/D A/B/C/D;这一秒加入了 i + 1 i+1 i+1这个数后,序列会长什么样。
于是我们得到了以下状态转移,很快啊 :
③ A i , j = 2 j A i − 1 , j + ( i − 2 j ) A i − 1 , j − 1 + B i − 1 , j − 1 + C i − 1 , j − 1 A_{i,j}=2j\ A_{i-1,j}+(i-2j)\ A_{i-1,j-1}+B_{i-1,j-1}+C_{i-1,j-1} Ai,j=2j Ai−1,j+(i−2j) Ai−1,j−1+Bi−1,j−1+Ci−1,j−1
④ B i , j = 2 j B i − 1 , j + ( i − 2 j − 1 ) B i − 1 , j − 1 + B i − 1 , j + A i − 1 , j + D i − 1 , j − 1 B_{i,j}=2j\ B_{i-1,j}+(i-2j-1)\ B_{i-1,j-1}+B_{i-1,j}+A_{i-1,j}+D_{i-1,j-1} Bi,j=2j Bi−1,j+(i−2j−1) Bi−1,j−1+Bi−1,j+Ai−1,j+Di−1,j−1
③
(1)对于一个形如
A
A
A的序列,在峰的严格左边或峰的严格右边加入新数后,峰的数量不变。这样的位置共有
2
j
2j
2j个。
(2)考虑对于一个形如 A A A的序列,其长度为 i − 1 i-1 i−1且峰的数量为 j − 1 j-1 j−1。当我们加入的新数不在峰值两侧时,峰的数量才能加一;同时我们也要使得加入这个数之后序列依然形如 A A A,所以可插入的位置有 ( i − 1 ) − 1 − 2 ( j − 1 ) = i − 2 j (i-1)-1-2(j-1)=i-2j (i−1)−1−2(j−1)=i−2j个。
(3)插在
B
B
B的前两个位置之间;
(4)插在
C
C
C的后两个位置之间。
④
(1)同③(1)
(2)此时情况与③(2)略显不同。考虑对于一个形如
B
B
B的序列,其长度为
i
−
1
i-1
i−1且峰的数量为
j
−
1
j-1
j−1。当我们加入的新数不在峰值两侧时,峰的数量才能加一;同时我们也要使得加入这个数之后序列依然形如
A
A
A,因此不能插在前两个位置之间,所以可插入的位置有
(
i
−
12
−
1
−
2
(
j
−
1
)
=
i
−
2
j
−
1
(i-12-1-2(j-1)=i-2j-1
(i−12−1−2(j−1)=i−2j−1个。
(3)插在
B
B
B的前两个位置之间;
(4)插在
A
A
A的第一个位置;
(5)插在
D
D
D的后两个位置之间。
你还记得状态与状态之间显然的联系吗?我们可以通过①②化简这两个状态转移,使得这两个式子仅仅与 A , B A,B A,B有关。
③:
A
i
,
j
=
2
j
A
i
−
1
,
j
+
(
i
−
2
j
)
A
i
−
1
,
j
−
1
+
2
B
i
−
1
,
j
−
1
A_{i,j}=2j\ A_{i-1,j}+(i-2j)\ A_{i-1,j-1}+2\ B_{i-1,j-1}
Ai,j=2j Ai−1,j+(i−2j) Ai−1,j−1+2 Bi−1,j−1
④:
B
i
,
j
=
(
2
j
+
1
)
B
i
−
1
,
j
+
(
i
−
2
j
−
1
)
B
i
−
1
,
j
−
1
+
2
A
i
−
1
,
j
B_{i,j}=(2j+1)\ B_{i-1,j}+(i-2j-1)\ B_{i-1,j-1}+2\ A_{i-1,j}
Bi,j=(2j+1) Bi−1,j+(i−2j−1) Bi−1,j−1+2 Ai−1,j
答案:
f
n
,
k
f_{n,k}
fn,k
边界:
A
0
,
0
=
B
0
,
0
=
1
A_{0,0}=B_{0,0}=1
A0,0=B0,0=1
不难发现这个 d p dp dp做法的时间复杂度为 O ( n 2 ) O(n^2) O(n2)。我们预处理出 d p dp dp数组,每次即可完成 O ( 1 ) O(1) O(1)查询。
期望得分
32
32
32分。卡老师果然毒瘤
Part 2: 数据范围的性质+新的 d p dp dp,分治NTT,时间复杂度 O ( n log 2 n ) O(n \log^2 n) O(nlog2n)
Part 1中的 d p dp dp的状态本身数量已经爆炸,似乎非常难再进行一些优化了。
于是我们观察数据范围,惊人地发现 max ( 1 , ⌊ n − 1 2 ⌋ − 10 ) ≤ k ≤ ⌊ n − 1 2 ⌋ \max(1,\lfloor \frac {n-1} 2 \rfloor -10) \le k \le \lfloor \frac {n-1} 2 \rfloor max(1,⌊2n−1⌋−10)≤k≤⌊2n−1⌋。
这个东西有什么用呢?这意味着 k k k与 ⌊ n − 1 2 ⌋ \lfloor \frac {n-1} 2 \rfloor ⌊2n−1⌋相差不大。换句话说,如果我们把 d p dp dp数组看成一个很大的矩阵,那么答案的位置十分靠近对角线。
于是,我们只需要快速求出对角线上的所有 d p dp dp值,然后暴力转移即可。不难发现,这里的暴力转移的次数不会超过 100 100 100次,于是现在唯一的问题在于如何快速求出对角线上的 d p dp dp值。
状态设计:
①
f
i
f_i
fi表示,满足
π
1
<
π
2
,
π
n
−
1
>
π
n
\pi_1<\pi_2,\pi_{n-1}>\pi_n
π1<π2,πn−1>πn的交错排列
π
\pi
π数量;
②
g
i
g_i
gi表示,满足
π
1
<
π
2
,
π
n
−
1
<
π
n
\pi_1<\pi_2,\pi_{n-1}<\pi_n
π1<π2,πn−1<πn的交错排列
π
\pi
π数量;
钦定
f
o
d
d
=
0
,
g
e
v
e
n
=
1
f_{odd}=0,g_{even}=1
fodd=0,geven=1。
状态转移:
⑤
f
i
=
∑
j
=
1
i
−
1
C
i
j
f
j
f
i
−
1
−
j
f_i=\sum_{j=1}^{i-1} C_i^j\ f_j\ f_{i-1-j}
fi=j=1∑i−1Cij fj fi−1−j
⑥ g i = ∑ j = 1 i − 1 C i j g j f i − 1 − j g_i=\sum_{j=1}^{i-1} C_i^j\ g_j\ f_{i-1-j} gi=j=1∑i−1Cij gj fi−1−j
这里对状态转移⑤做出必要的解释。
如上图,我们枚举了左边 f f f的长度 j j j,那么右边 f f f的长度就是 i − j − 1 i-j-1 i−j−1。同时,我们也要选择一些数放到左边的 f f f中去,选择的方案数为 C i j C_i^j Cij。根据乘法原理不难得到⑤。
⑥的证明同理,这里不再赘述。
分治NTT即可,时间复杂度为
O
(
n
log
2
n
)
O(n \log^2 n)
O(nlog2n)。被卡掉了
Part 3: 微分方程+泰勒展开+多项式求逆,时间复杂度 O ( n log n ) O(n \log n) O(nlogn),本题精髓所在
很可惜,加强版的时限为 0.4 s 0.4s 0.4s,再加上NTT的巨大常数……Part 2不足以通过加强版!它不是正解!
我们再列一下这个状态转移:
⑤ f i = ∑ j = 1 i − 1 C i j f j f i − 1 − j f_i=\sum_{j=1}^{i-1} C_i^j\ f_j\ f_{i-1-j} fi=∑j=1i−1Cij fj fi−1−j
⑥ g i = ∑ j = 1 i − 1 C i j g j f i − 1 − j g_i=\sum_{j=1}^{i-1} C_i^j\ g_j\ f_{i-1-j} gi=∑j=1i−1Cij gj fi−1−j
令 f , g f,g f,g的生成函数分别为 F , G F,G F,G,那么有
⑦ F ′ ( x ) = F 2 ( x ) + 1 F'(x)=F^2(x)+1 F′(x)=F2(x)+1
⑧ G ′ ( x ) = F ( x ) G ( x ) G'(x)=F(x)G(x) G′(x)=F(x)G(x)
这里大概解释一下这两个式子。对指数生成函数较为熟悉的同学可以跳过。
Lemma 1
F ( x ) ′ = 1 x F ( x ) F(x)'=\frac 1 x F(x) F(x)′=x1F(x)
Certification 1
考虑 x k k ! \frac {x^k} {k!} k!xk的导数是什么。
对于分母而言, k ! k! k!不可导,所以保留 1 k ! \frac 1 {k!} k!1。
对于分子而言, ( x k ) ′ = k x k − 1 (x^k)'=k x^{k-1} (xk)′=kxk−1
所以 x k k ! = k x k − 1 k ! = x k − 1 ( k − 1 ) ! \frac {x^k} {k!}=\frac {kx^{k-1}} {k!}=\frac {x^{k-1}}{(k-1)!} k!xk=k!kxk−1=(k−1)!xk−1
带入原式得 F ( x ) ′ = ∑ i = 0 ∞ F i x i − 1 ( i − 1 ) ! = ∑ i = 0 ∞ F i + 1 x i i ! F(x)'=\sum_{i=0}^{∞} F_i \frac {x^{i-1}}{(i-1)!}=\sum_{i=0}^{∞} F_{i+1} \frac {x^i} {i!} F(x)′=i=0∑∞Fi(i−1)!xi−1=i=0∑∞Fi+1i!xi
所以 F ( x ) ′ = 1 x F ( x ) F(x)'=\frac 1 x F(x) F(x)′=x1F(x)
Lemma 2
对于两个EGF F ( x ) G ( x ) F(x)G(x) F(x)G(x),令 P ( x ) = F ( x ) G ( x ) P(x)=F(x)G(x) P(x)=F(x)G(x),那么 [ x t ] P ( x ) = ∑ i = 0 t C t i F i G t − i [x^t]P(x)=\sum_{i=0}^t C_t^i\ F_i\ G_{t-i} [xt]P(x)=∑i=0tCti Fi Gt−i
Certification 2
考虑到 ( ∑ i = 0 t C t i F i G t − i ) x t t ! = ∑ i = 0 t F i i ! G t − i ( t − i ) ! x t t ! (\sum_{i=0}^t C_t^i\ F_i\ G_{t-i})\frac {x^t} {t!}=\sum_{i=0}^t \frac {F_i} {i!} \frac {G_{t-i}} {(t-i)!} \frac {x^t} {t!} (i=0∑tCti Fi Gt−i)t!xt=i=0∑ti!Fi(t−i)!Gt−it!xt
此时成为了一个卷积的形式,所以 F ( x ) G ( x ) = P ( x ) F(x)G(x)=P(x) F(x)G(x)=P(x)。
将⑦⑧联立,得到了一个微分方程,解得 F ( x ) = tan ( x ) , G ( x ) = sec ( x ) F(x)=\tan(x), G(x)=\sec(x) F(x)=tan(x),G(x)=sec(x)
于是我们将 F ( x ) F(x) F(x)与 G ( x ) G(x) G(x)泰勒展开并转变为指数生成函数即可。最后随便递推一下就得到了答案。
在实现的时候,由于 G ( x ) c o s ( x ) = 1 G(x)cos(x)=1 G(x)cos(x)=1,所以我们可以将我们更为熟悉的 c o s ( x ) cos(x) cos(x)展开再多项式求逆转化为 G ( x ) G(x) G(x)。
时间复杂度 O ( n log n ) O(n \log n) O(nlogn)。
Summary
本题的重难点是Part 1中的 d p dp dp。那个 d p dp dp比较难想而且状态转移也比较容易写错。接下来的每一步,实际上都是比较套路的。步骤较多,考察了做题人的耐心;同时考察了一些高等数学的技巧。