多项式&生成函数_杂题
昨天上午 fateice 大神讲 dp 计数,下午听 zzq 讲微积分和线代入门(啊我一个老年选手为什么要去听入门啊喂
当 zzq 神带我复习了,不亏。
今天上午模拟赛 zzq 场,黄队说可能是最后一场信心赛了,算了,我三个题都莽的暴力不好说啥了。
哦还有,边分治+闵可夫斯基和的那个坑弃了咕咕咕咕咕咕
辛普森积分法__优雅的乱搞
对于一个函数的积分 ∫ l r f ( x ) d x \int_{l}^rf(x)dx ∫lrf(x)dx ,如果 f ( x ) f(x) f(x) 是不超过三次的,那么 ∫ l r f ( x ) d x = f ( l ) + 4 f ( m i d ) + f ( r ) 6 × ( r − l ) \int_l^rf(x)dx=\frac{f(l)+4f(mid)+f(r)}{6}\times (r-l) ∫lrf(x)dx=6f(l)+4f(mid)+f(r)×(r−l) 。
由于大多数情况下的函数是积不出来的,所以求积分就可以直接上辛普森积分。具体就是积某一段区间时,把这段区间当作是三次以内的函数来积,然后比较一下这段区间分成两半来积得到的答案,如果答案差不多就直接返回了,否则就递归。
然后避免函数有长得像坑一样的东西,可以强制精确到一定的值的时候再返回
double Sim(double l,double r){
double mid=(l+r)/2.0;
return (f(l)+4.0*f(mid)+f(r))*(r-l)/6.0;
}
double Integral(double l,double r){
double mid=(l+r)/2.0;
if(r-l<=limit)
if(abs(Sim(l,r)-Sim(l,mid)-Sim(mid,r))<eps)
return Sim(l,r);
return Sim(l,mid)+Sim(mid,r);
}
多项式&生成函数
多项式的板子还挺多的, fft、牛迭(几乎包括了所有基本运算)、 多点求值、插值、拉反。
然后会写板子了就能去切题了(假的
复读机 【集训队作业2019】
题意:有排成一排的 n ( 1 ≤ n ≤ 1 0 9 ) n(1\le n \le 10^9) n(1≤n≤109) 个球,你要把每个球染成k种颜色之一,每种颜色的球的个数都要是d的倍数,问方案数mod 19491001。时限1s。
subtask1: 1 ≤ k ≤ 500000 , d = 2 1\le k \le 500000,d=2 1≤k≤500000,d=2
subtask2: 1 ≤ k ≤ 1000 , d = 3 1\le k \le 1000,d=3 1≤k≤1000,d=3
分析:每种颜色的 EGF 为 ∑ i x i d ( i d ) ! \sum_i \frac{x^{id}}{(id)!} ∑i(id)!xid ,答案就是 n ! [ x n ] ( ∑ i x i d ( i d ) ! ) n![x^n](\sum_i\frac{x^{id}}{(id)!}) n![xn](∑i(id)!xid)
当 d = 2 d=2 d=2 时,考虑求 ∑ i x 2 i ( 2 i ) ! \sum_i\frac{x^{2i}}{(2i)!} ∑i(2i)!x2i,我们发现 e x = ∑ i x i i ! e^x=\sum_i \frac{x^i}{i!} ex=∑ii!xi 消去奇数项就是我们要求的东西,然后由于 e − x = ∑ i ( − 1 ) i x i i ! e^{-x}=\sum_i\frac{(-1)^ix^i}{i!} e−x=∑ii!(−1)ixi ,所以 ∑ i x i d ( i d ) ! = e x + e ( − x ) 2 \sum_i\frac{x^{id}}{(id)!}=\frac{e^x+e^{(-x)}}{2} ∑i(id)!xid=2ex+e(−x) 。
考虑求答案,二项式定理展开 ( e x + e − x ) k (e^x+e^{-x})^k (ex+e−x)k 得到 ∑ i = 0 k ( k i ) e x ( 2 i − k ) \sum_{i=0}^k{k \choose i} e^{x(2i-k)} ∑i=0k(ik)ex(2i−k) , [ x n ] e k x = k n n ! [x^n]e^{kx}=\frac{k^n}{n!} [xn]ekx=n!kn ,那么答案就是 n ! 1 2 k ∑ i = 0 k ( k i ) ( 2 i − k ) n n ! n!\frac{1}{2^k}\sum_{i=0}^k {k\choose i} \frac{(2i-k)^n}{n!} n!2k1∑i=0k(ik)n!(2i−k)n
当 d = 3 d=3 d=3 时,代入三次单位根 w 3 w_{3} w3 ,由于 1 + w 3 + w 3 2 = 0 1+w_3+w_3^2=0 1+w3+w32=0 ,然后对于任意正整数 k k k 有 ∑ i = 0 2 w 3 i k = 3 [ 3 ∣ k ] \sum_{i=0}^2w_3^{ik}=3[3|k] ∑i=02w3ik=3[3∣k] 。所以此时 ∑ i x i d ( i d ) ! = e x + e w 3 x + e w 3 2 x 3 \sum_i\frac{x^{id}}{(id)!}=\frac{e^{x}+e^{w_3x}+e^{w_3^2x}}{3} ∑i(id)!xid=3ex+ew3x+ew32x 。
e x + e w 3 x + e w 3 2 x e^{x}+e^{w_3x}+e^{w_3^2x} ex+ew3x+ew32x 也可以二项式展开,同理得到类似的式子。
小朋友和二叉树
题意:给一个集合S,对每个x∈[1,m],问有多少个不同的带权二叉树满足其每个点的权值在S里面,且权值和=x,输出方案数mod 998244353。n,m≤100000。
分析:设答案的生成函数为 f ( x ) f(x) f(x) , g g g 为 S S S 的普通生成函数,那么有 f ( x ) = g f 2 ( x ) f(x)=gf^2(x) f(x)=gf2(x) ,解二次方程即可。
DAG
题意:求n个点带标号的有向无环图个数,mod 998244353。 n ≤ 1 0 5 n\le 10^5 n≤105 。
分析:切入点就是枚举出度为0的点数 j j j 。 ∑ j ( i j ) f [ i − j ] 2 j ( i − j ) \sum_j{i\choose j}f[i-j]2^{j(i-j)} ∑j(ji)f[i−j]2j(i−j) 就是至少有 j j j 个点出度为0的方案数。
容斥一下
f
i
=
∑
j
=
1
i
(
−
1
)
j
−
1
(
i
j
)
2
j
(
i
−
j
)
f
i
−
j
f_i=\sum_{j=1}^i(-1)^{j-1}{i\choose j}2^{j(i-j)}f_{i-j}
fi=∑j=1i(−1)j−1(ji)2j(i−j)fi−j 。然后把它整成多项式,套bluestein变换,
w
=
2
w=\sqrt2
w=2
f
i
=
∑
j
=
1
i
(
−
1
)
j
−
1
(
i
j
)
w
i
2
−
(
i
−
j
)
2
−
j
2
f
i
−
j
f
i
i
!
w
i
2
=
∑
j
=
1
i
(
−
1
)
j
−
1
j
!
w
j
2
f
i
−
j
(
i
−
j
)
!
w
(
i
−
j
)
2
f_i=\sum_{j=1}^i(-1)^{j-1}{i\choose j}w^{i^2-(i-j)^2-j^2}f_{i-j}\\ \frac{f_i}{i!w^{i^2}}=\sum_{j=1}^i\frac{(-1)^{j-1}}{j!w^{j^2}} \frac{f_{i-j}}{(i-j)!w^{(i-j)^2}}
fi=j=1∑i(−1)j−1(ji)wi2−(i−j)2−j2fi−ji!wi2fi=j=1∑ij!wj2(−1)j−1(i−j)!w(i−j)2fi−j
F
=
T
F
+
1
,
F
=
1
1
−
T
F=TF+1,F=\frac{1}{1-T}
F=TF+1,F=1−T1 。
MSET,PSET
(这是个知识点,之前没见过,但感觉就是一般的组合问题形式化了)
-
MSET 大小为 i i i 的元素有 a [ i ] a[i] a[i] 种不同的,无序组合在一起。
∑ i ( 1 1 − x i ) a i = exp ( − ∑ i a i ln ( 1 − x i ) ) = exp ( ∑ i a i ∑ j x i j j ) \sum_i (\frac{1}{1-x^i})^{a_i}\\ =\exp(-\sum_ia_i\ln(1-x^i))\\ =\exp(\sum_ia_i\sum_j\frac{x^{ij}}{j}) i∑(1−xi1)ai=exp(−i∑ailn(1−xi))=exp(i∑aij∑jxij) -
PSET 大小为 i i i 的元素有 a [ i ] a[i] a[i] 个不同的,组合在一起。
∑ i ( 1 + x i ) a i = exp ( ∑ i a i ln ( 1 + x i ) ) = exp ( ∑ i a i ∑ j x i j ( − 1 ) j − 1 j ) \sum_i (1+x^i)^{a_i}\\ =\exp(\sum_ia_i\ln(1+x^i))\\ =\exp(\sum_ia_i\sum_j\frac{x^{ij}(-1)^{j-1}}{j}) i∑(1+xi)ai=exp(i∑ailn(1+xi))=exp(i∑aij∑jxij(−1)j−1)
有根无标号「奇树」计数
题意:定义一棵有根树为「奇树」,当且仅当其所有叶子深度都为奇数(根节点深度为 1)。小 P 对奇树十分感兴趣,他想知道有多少棵 n 个奇点(不是 n 个点)的有根无标号奇树(奇点深度为奇数,由上述定义根也是奇点)。你需要对于 n=1…m 分别输出答案。
m
≤
1
0
5
m\le 10^5
m≤105。
分析:设答案的生成函数是 F ( x ) F(x) F(x) , F ( x ) = x M ( M ( F ( x ) ) − 1 ) F(x)=xM(M(F(x))-1) F(x)=xM(M(F(x))−1)。 M ( ) M() M() 就是 MSET 。牛顿迭代求解。
烷基计数
题意:求儿子数不超过 3 的有根树个数
分析:设答案的生成函数为 A ( x ) A(x) A(x),于是有 A ( x ) = 1 + x A ( x ) 3 + 3 A ( x ) A ( x 2 ) + 2 A ( x 3 ) 6 A(x)=1+x\frac{A(x)^3+3A(x)A(x^2)+2A(x^3)}{6} A(x)=1+x6A(x)3+3A(x)A(x2)+2A(x3) 。牛迭迭代求解。