昨天上午 fateice 大神讲 dp 计数,下午听 zzq 讲微积分和线代入门(啊我一个老年选手为什么要去听入门啊喂
当 zzq 神带我复习了,不亏。
今天上午模拟赛 zzq 场,黄队说可能是最后一场信心赛了,算了,我三个题都莽的暴力不好说啥了。
哦还有,边分治+闵可夫斯基和的那个坑弃了咕咕咕咕咕咕
辛普森积分法__优雅的乱搞
对于一个函数的积分 ∫lrf(x)dx\int_{l}^rf(x)dx∫lrf(x)dx ,如果 f(x)f(x)f(x) 是不超过三次的,那么 ∫lrf(x)dx=f(l)+4f(mid)+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≤109)n(1\le n \le 10^9)n(1≤n≤109) 个球,你要把每个球染成k种颜色之一,每种颜色的球的个数都要是d的倍数,问方案数mod 19491001。时限1s。
subtask1:1≤k≤500000,d=21\le k \le 500000,d=21≤k≤500000,d=2
subtask2:1≤k≤1000,d=31\le k \le 1000,d=31≤k≤1000,d=3
分析:每种颜色的 EGF 为 ∑ixid(id)!\sum_i \frac{x^{id}}{(id)!}∑i(id)!xid ,答案就是 n!)n!})n!xid)
当 d=2d=2d=2 时,考虑求 ∑ix2i(2i)!\sum_i\frac{x^{2i}}{(2i)!}∑i(2i)!x2i,我们发现 ex=∑ixii!e^x=\sum_i \frac{x^i}{i!}ex=∑ii!xi 消去奇数项就是我们要求的东西,然后由于 e−x=∑i(−1)ixii!e^{-x}=\sum_i\frac{(-1)^ix^i}{i!}e−x=∑ii!(−1)ixi ,所以 ∑ixid(id)!=ex+e(−x)2\sum_i\frac{x^{id}}{(id)!}=\frac{e^x+e^{(-x)}}{2}∑i(id)!xid=2ex+e(−x) 。
考虑求答案,二项式定理展开 (ex+e−x)k(e^x+e^{-x})^k(ex+e−x)k 得到 ∑i=0k(ki)ex(2i−k)\sum_{i=0}^k{k \choose i} e^{x(2i-k)}∑i=0k(ik)ex(2i−k) ,[xn]ekx=knn![x^n]e^{kx}=\frac{k^n}{n!}[xn]ekx=n!kn ,那么答案就是 n!12k∑i=0k(ki)(2i−k)nn!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=3d=3d=3 时,代入三次单位根 w3w_{3}w3 ,由于 1+w3+w32=01+w_3+w_3^2=01+w3+w32=0 ,然后对于任意正整数 kkk 有 ∑i=02w3ik=3[3∣k]\sum_{i=0}^2w_3^{ik}=3[3|k]∑i=02w3ik=3[3∣k] 。所以此时 ∑ixid(id)!=ex+ew3x+ew32x3\sum_i\frac{x^{id}}{(id)!}=\frac{e^{x}+e^{w_3x}+e^{w_3^2x}}{3}∑i(id)!xid=3ex+ew3x+ew32x 。
ex+ew3x+ew32xe^{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) ,ggg 为 SSS 的普通生成函数,那么有 f(x)=gf2(x)f(x)=gf^2(x)f(x)=gf2(x) ,解二次方程即可。
DAG
题意:求n个点带标号的有向无环图个数,mod 998244353。n≤105n\le 10^5n≤105 。
分析:切入点就是枚举出度为0的点数 jjj 。∑j(ij)f[i−j]2j(i−j)\sum_j{i\choose j}f[i-j]2^{j(i-j)}∑j(ji)f[i−j]2j(i−j) 就是至少有 jjj 个点出度为0的方案数。
容斥一下 fi=∑j=1i(−1)j−1(ij)2j(i−j)fi−jf_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=2w=\sqrt2w=2
fi=∑j=1i(−1)j−1(ij)wi2−(i−j)2−j2fi−jfii!wi2=∑j=1i(−1)j−1j!wj2fi−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=TF+1,F=11−TF=TF+1,F=\frac{1}{1-T}F=TF+1,F=1−T1 。
MSET,PSET
(这是个知识点,之前没见过,但感觉就是一般的组合问题形式化了)
-
MSET 大小为 iii 的元素有 a[i]a[i]a[i] 种不同的,无序组合在一起。
∑i(11−xi)ai=exp(−∑iailn(1−xi))=exp(∑iai∑jxijj) \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 大小为 iii 的元素有 a[i]a[i]a[i] 个不同的,组合在一起。
∑i(1+xi)ai=exp(∑iailn(1+xi))=exp(∑iai∑jxij(−1)j−1j) \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≤105m\le 10^5m≤105。
分析:设答案的生成函数是 F(x)F(x)F(x) ,F(x)=xM(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+xA(x)3+3A(x)A(x2)+2A(x3)6A(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) 。牛迭迭代求解。