多项式&生成函数_杂题

昨天上午 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)×(rl)

由于大多数情况下的函数是积不出来的,所以求积分就可以直接上辛普森积分。具体就是积某一段区间时,把这段区间当作是三次以内的函数来积,然后比较一下这段区间分成两半来积得到的答案,如果答案差不多就直接返回了,否则就递归。

然后避免函数有长得像坑一样的东西,可以强制精确到一定的值的时候再返回

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(1n109) 个球,你要把每个球染成k种颜色之一,每种颜色的球的个数都要是d的倍数,问方案数mod 19491001。时限1s。

subtask1: 1 ≤ k ≤ 500000 , d = 2 1\le k \le 500000,d=2 1k500000,d=2

subtask2: 1 ≤ k ≤ 1000 , d = 3 1\le k \le 1000,d=3 1k1000,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!} ex=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+ex)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(2ik) [ 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!2k1i=0k(ik)n!(2ik)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[3k] 。所以此时 ∑ 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 n105

分析:切入点就是枚举出度为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[ij]2j(ij) 就是至少有 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)j1(ji)2j(ij)fij 。然后把它整成多项式,套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=1i(1)j1(ji)wi2(ij)2j2fiji!wi2fi=j=1ij!wj2(1)j1(ij)!w(ij)2fij
F = T F + 1 , F = 1 1 − T F=TF+1,F=\frac{1}{1-T} F=TF+1F=1T1


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(1xi1)ai=exp(iailn(1xi))=exp(iaijjxij)

  • 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(iailn(1+xi))=exp(iaijjxij(1)j1)


有根无标号「奇树」计数

题意:定义一棵有根树为「奇树」,当且仅当其所有叶子深度都为奇数(根节点深度为 1)。小 P 对奇树十分感兴趣,他想知道有多少棵 n 个奇点(不是 n 个点)的有根无标号奇树(奇点深度为奇数,由上述定义根也是奇点)。你需要对于 n=1…m 分别输出答案。
m ≤ 1 0 5 m\le 10^5 m105

分析:设答案的生成函数是 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) 。牛迭迭代求解。

posted @ 2022-10-10 20:18  缙云山车神  阅读(41)  评论(0编辑  收藏  举报