组合计数
结论
生成函数相关
结论
$$ \begin{aligned} \sum_{n\ge 0}\binom{c+n}{c}z^n&=\dfrac{1}{\left(1-z\right)^{c+1}} \\ \sum_{n\ge 0} n^mz^n&=\sum_{k}\left\{\begin{matrix}m\\k\end{matrix}\right\}\dfrac{k!z^k}{\left(1-z\right)^{k+1}} \\ e^{e^z-1}&=\sum_{n\ge 0}Bell_nz^n \\ \dfrac{z}{e^z-1}&=\sum_{n\ge 0}B_nz^n \\ \sum_{n\ge 0} \dfrac{1}{n+1}\binom{2n}{n}z^n&=\dfrac{1-\sqrt{1-4z}}{2z} \\ \end{aligned} $$
方法
$$ \begin{aligned} \mathcal{A}=\operatorname{\mathcal{Sequence}}\left(\mathcal{B}\right)&\rightarrow A\left(z\right)=\dfrac{1}{1-B\left(z\right)}\\ \mathcal{A}=\operatorname{\mathcal{Multiset}}\left(\mathcal{B}\right)& \rightarrow A\left(z\right)=\left\{\begin{matrix}\displaystyle\prod_{n\ge 1}\left(1-z^n\right)^{-B_n}\\\displaystyle \exp\left(\sum_{k=1}^{\infty}\dfrac{1}{k}B\left(z^k\right)\right)\end{matrix}\right. \\ \mathcal{A}=\operatorname{\mathcal{PowerSet}}\left(\mathcal{B}\right)& \rightarrow A\left(z\right)=\left\{\begin{matrix}\displaystyle\prod_{n\ge 1}\left(1+z^n\right)^{B_n}\\\displaystyle \exp\left(\sum_{k=1}^{\infty}\dfrac{\left(-1\right)^{k-1}}{k}B\left(z^k\right)\right)\end{matrix}\right. \end{aligned} $$
$\mathcal{Powerset}$ 即为对一类对象的无顺序 $01$ 背包,$\mathcal{Multiset}$ 即为对一类对象的多重背包,$\mathcal{Sequence}$,顾名思义,是序列化构造,即若干个对象排成一行。
$\mathcal{Multiset}$ 证明:
$$ \begin{aligned} A\left(z\right)&=\prod_{n\ge 1}\left(1-z^n\right)^{-B_n} \\ &=\exp\left(\sum_{n\ge 1} -B_n\ln\left(1-z^n\right)\right) \\ &=\exp\left(\sum_{n\ge 1}B_n\sum_{k\ge 1}\dfrac{1}{k}z^{nk}\right) \\ &=\exp\left(\sum_{k=1}^{\infty}\dfrac{1}{k}B\left(z^k\right)\right) \end{aligned} $$
$\mathcal{PowerSet}$ 同理
例:付公主的背包
有 $n$ 件物品,求组成重量为 $\left[1,m\right]$ 的物品的方案数
裸题,用上面式子求出 $\exp$ 前的每项系数然后直接 $\exp$ 即可,复杂度调和级数加求 $\exp$ 复杂度,$\mathcal{O}\left(n\log_2n\right)$
例:好图计数
归纳定义“好的”无向简单图:
- 单点
- 每个连通块都是好图
- 好的图的补图
求无标号无向简单图的个数 $1\le n\le 23333$,模数 $p$ 满足 $2^{29}<p<2^{30}$ 且为素数
首先,不存在 $n\ge 2$ 个点的好图使得自身和自身的补图都是连通的
那么 $n\ge 2$ 个点的只有一个连通块的补图和 $\ge 2$ 个连通块的补图的数量是相等的
设 $F\left(z\right)$ 是只有一个连通块的好图的生成函数
那么 $F\left(z\right)=\mathcal{Multiset}\left(F\left(z\right)\right)-1$
由于 $\exp$ 可以用组合意义 $\mathcal{O}\left(n^2\right)$ 做,而且这个做法是半在线的,那么就可以半在线的解决原问题了。
常用组合恒等式
$$ \begin{aligned} x^n&=\sum_{k}\left\{\begin{matrix}n\\k\end{matrix}\right\}x^{\underline{k}}=\sum_{k}\left\{\begin{matrix}n\\k\end{matrix}\right\}\left(-1\right)^{n-k}x^{\overline{k}} \\ x^{\underline{n}}&=\sum_k\left[\begin{matrix}n\\k\end{matrix}\right]\left(-1\right)^{n-k}x^k\\ x^{\overline{n}}&=\sum_k\left[\begin{matrix}n\\k\end{matrix}\right]x^k \\ \left\{\begin{matrix}n\\m\end{matrix}\right\}&=\dfrac{1}{m!}\sum_{k}\binom{m}{k}\left(-1\right)^{m-k}k^n \\ \sum_{k\le n}\binom{m+k}{k}&=\binom{m+n+1}{n} \\ \sum_{0\le k\le n}\binom{k}{m}&=\binom{n+1}{m+1} \\ \sum_{k}\binom{n}{k}\binom{m}{t-k}&=\binom{n+m}{t} \\ \sum_{k}\binom{q-k}{m}\binom{p+k}{n}&=\left[z^{p+q-m-n}\right]\dfrac{1}{\left(1-z\right)^{m+1}}\cdot\dfrac{1}{\left(1-z\right)^{n+1}}\\ &=\binom{p+q+1}{m+n+1} \end{aligned} $$
相关问题
求 $\displaystyle\sum_{i=0}^{\infty}\binom{nk}{ik+r}$ $1\le n\le 10^9,1\le k\le 50,0\le r<k$
首先我们把问题一般化,变成 $\displaystyle\sum_{i=0}^{\infty}\binom{m}{ik+r}$
由于 $\displaystyle \binom{m}{ik+r}=\binom{m-1}{ik+r-1}+\binom{m-1}{ik+r}$
$\equiv r\pmod k$ 的项只和 $\equiv r-1\pmod k$ 的项 $\equiv r\pmod k$ 的项有关,矩乘即可。
给定 $n,x,p$ 和 $m$ 次多项式 $f\left(x\right)$,求 $\displaystyle \sum_{k=0}^nf\left(k\right) \times x^k\times \binom{n}{k}\bmod p$
这种形式的常见套路就是将 $f\left(k\right)$ 转成下降幂做,设 $f\left(k\right)=\sum_{i=0}^{m}f_ik^{\underline{i}}$
那么
$$ \begin{aligned} \sum_{k=0}^nf\left(k\right)\times x^k\times \binom{n}{k} \bmod p &=\sum_{k=0}^n\sum_{j=0}^mf_jk^{\underline{j}}x^k\binom{n}{k}\\ &=\sum_{j=0}^mf_j\sum_{k=0}^n\dfrac{k!}{\left(k-j\right)!}\binom{n}{k}x^k\\ &=\sum_{j=0}^mf_jn^{\underline{j}}\sum_{k=0}^n\binom{n-j}{k-j}x^{k-j}x^j\\ &=\sum_{j=0}^{\min\left(n,m\right)}f_jn^{\underline{j}}\left(1+x\right)^{n-i}x^i \end{aligned} $$
$\mathcal{O}\left(n^2\right)$ 转下降幂即可
例:十二重计数法
球数:$n$,盒子数:$m$
I:球之间互不相同,盒子之间互不相同。
答案就是 $m^n$
II:球之间互不相同,盒子之间互不相同,每个盒子至多装一个球。
答案就是 $\binom{m}{n}\cdot n!$
III:球之间互不相同,盒子之间互不相同,每个盒子至少装一个球。
容斥,钦定一些盒子没装球,答案:$\displaystyle\sum_{i=0}^m\left(-1\right)^i\binom{m}{i}\left(m-i\right)^n$
或者斯特林数定义:$\left\{\begin{matrix}n\\m\end{matrix}\right\}\cdot m!$
IV:球之间互不相同,盒子全部相同。
斯特林数定义:$\sum_{i=1}^m\left\{\begin{matrix}n\\i\end{matrix}\right\}$
V:球之间互不相同,盒子全部相同,每个盒子至多装一个球。
所有合法方案都是等价的,答案:$\left[n\le m\right]$
VI:球之间互不相同,盒子全部相同,每个盒子至少装一个球。
斯特林数定义:$\left\{\begin{matrix}n\\m\end{matrix}\right\}$
VII:球全部相同,盒子之间互不相同。
即为 $x_1+x_2+\cdots +x_m=n$ 的非负整数解个数,$\binom{n+m-1}{m-1}$
VIII:球全部相同,盒子之间互不相同,每个盒子至多装一个球。
选出一些盒子装球即可。答案:$\binom{m}{n}$
IX:球全部相同,盒子之间互不相同,每个盒子至少装一个球。
即为 $x_1+x_2+\cdots +x_m=n$ 的正整数解个数,$\binom{n-1}{m-1}$
X:球全部相同,盒子全部相同。
即为划分数,使用五边形数求逆即可
五边形数定理:
$$ \prod_{n=1}^{\infty}\left(1-x^n\right)=\sum_{k=-\infty}^{\infty}\left(-1\right)^kx^{\frac{k\left(3k-1\right)}{2}} $$
XI:球全部相同,盒子全部相同,每个盒子至多装一个球。
此时合法方案无论怎么放还是相同的,答案:$\left[n\le m\right]$
XII:球全部相同,盒子全部相同,每个盒子至少装一个球。
要求拆分部分恰好为 $m$
考虑 $\mathrm{Ferrers}$ 图的转置,那么即求出 $n$ 拆分成 $\le m$ 的部分且至少有一个为 $m$
那么即为 $n-m$ 拆分成 $\le m$ 的方案数,使用 付公主的背包 即 $\mathcal{MULTISET}$ 即可
常用反演
二项式反演
$$ \sum_{m\le n}\binom{n}{m}\left(-1\right)^{n-m}\left(\sum_{k\le m}\binom{m}{k}f\left(k\right)\right)=f\left(n\right) $$
子集反演
$$ \sum_{T\subseteq S}\left(-1\right)^{\left|S\right|-\left|T\right|}\sum_{V\subseteq T}f\left(V\right)=f\left(S\right) $$
常用容斥
容斥的本质就是对于每种状态分配一个系数,使得最后的结果中每个状态被计算了正确的次数
段长 $\le k$
$$ \begin{aligned} \dfrac{1}{1-F\left(z\right)}&=\sum_{i=0}^{k-1}z^i=\dfrac{z^k-1}{z-1}\\ F\left(z\right)&=\dfrac{z^k-z}{z^k-1} \end{aligned} $$
例:LOJ P3395 「2020-2021 集训队作业」Yet Another Permutation Problem
给定 $n$,对于 $1\le k\le n$ ,求有多少个排列的极长的上升子串的最大长度大于等于 $k$,$n\le 2000$,对 $m$ 取模,保证素数
容斥系数的 $OGF$ 是 $\frac{z^k-z}{z^k-1}$ ,那么假设 $EGF$ 是 $G\left(z\right)$,那么答案就是 $\left[\frac{z^n}{n!}\right]\frac{1}{1-G\left(z\right)}$,由于 $G\left(z\right)$ 非零系数的位置和 $F\left(z\right)$ 一样,只有 $\frac{n}{k}$ 个,所以可以 $\mathcal{O}\left(\frac{n^2}{k}\right)$ 递推计算,总复杂度调和级数 $\mathcal{O}\left(n^2\ln n\right)$
例:GYM 103505C The revenge of GrandPaPà
给定 $n$,对于 $1\le k\le n$ ,求有多少个排列的极长的值域连续的上升子串的最大长度恰为 $k$,$n\le 2000$,使用科技可以做 $n\le 10^5$,且要求对答案 $\bmod p$ ,$p$ 不一定是个素数
首先我们对答案做一个前缀和,求出最大长度小于 $k$ 的数量,那么根据式子,容斥系数仅在 $1+i\cdot k$ 处有非零系数 $1$ 和在 $k+i\cdot k$ 处有非零系数 $-1$,所以我们考虑枚举 $-1$ 的个数和总共加了多少个 $k$ ,即 $\sum i$,这样就可以得出 $1$ 的个数
$$ \sum_{i\ge 0}\sum_{j\ge 0}\left(-1\right)^i\binom{n-\left(i+j\right)k+i}{i}\binom{j+n-\left(i+j\right)k+i-1}{j} $$
复杂度:$\sum_{k=1}^n\left(\frac{n}{k}\right)^2=\mathcal{O}\left(n^2\right)$,此时单次计算是 $\mathcal{O}\left(\left(\frac{n}{k}\right)^2\right)$ 的
科技做法:
设 $F$ 是 $\sum_{i\ge 0}i!z^i$ 那么求的就是 $\left[z^n\right]F\left(P\left(z\right)\right)$
考虑到 $F$ 是 $d-finite$ 的,满足 $\left(1-z\right)F-z^2F^{\prime}-1=0$
设 $G=F\left(P\left(z\right)\right)$,那么 $F^{\prime}=\dfrac{G^{\prime}}{P^{\prime}}$
$$ \left(1-P\right)F-P^2\dfrac{G^{\prime}}{P^{\prime}}-1=0 $$
将整个等式乘以 $P^{\prime}\cdot \left(1-z^m\right)^3$ 就可以整式递推了,恰好不需要逆元
Sage 代码验证:
_prec=40
R.<z> = PowerSeriesRing(QQ,default_prec=_prec)
m=int(input())
P=(z-z^m)/(1-z^m)
def F(x):
ret=0
for i in range(_prec):
ret+=factorial(i)*(x^i)
return ret
G=F(P)
p1=1-z-m*z^(m-1)+(2*m-1)*z^m-(m-1)*z^(m+1)
# p1=(1-P)*diff(P,z)*((1-z^m)^3)
p2=z^2-2*z^(m+1)+z^(2*m)-z^(m+2)+2*z^(2*m+1)-z^(3*m)
# p2=P^2*((1-z^m)^3)
p3=1-m*z^(m-1)+(m-2)*z^m+m*z^(2*m-1)-(m-1)*z^(2*m)
# p3=diff(P,z)*((1-z^m)^3)
print(G*p1-p2*diff(G,z)-p3)
此时我们进行根号分治就是 $\mathcal{O}\left(n\sqrt{n}\right)$ 了。
子集容斥
$$ \begin{aligned} \exp\left(F\left(z\right)-1\right)&=1+z\\ F\left(z\right)&=\ln\left(1+z\right)+1=1+\sum_{i\ge 1}\dfrac{\left(-1\right)^{i-1}}{i}z^i \end{aligned} $$
例:ABC236Ex Distinct Multiplies
给定 $n$ 个正整数 $D_i$ 和 $M$,求有多组互不相同的 $A_i$ 使得 $\forall 1\le i\le n,D_i\mid A_i,A_i\le M$,答案 $\bmod 998244353$,$1\le n\le 16,1\le D_i,M\le 10^{18}$
枚举 $A_i$ 相同的连通块进行容斥,答案就是 $ \left\lfloor\frac{M}{\operatorname{lcm}\left(S\right)}\right\rfloor $
$kth\min-\max$ 容斥:
$$ \max_{k}\left(S\right)=\sum_{T\subseteq S}\binom{\left|T\right|-1}{k-1}\min_{k}\left(T\right) $$
给定 $n$ 和 长为 $n$ 的序列 $w_i$,有 $n$ 个猎人,每次按 $w_i$ 带权随机干掉一个猎人,求 $1$ 最后被干掉的概率
首先有结论:如果每次可以杀死的猎人是全集,不断杀直到杀死一个未死的猎人,最后的概率不变
那么我们考虑 $1\sim n$全部死亡的期望步数 $f_1$ 和 $2\sim n$ 全部死亡的期望步数 $f_2$
那么 $1 $ 在 $2\sim n$ 之后死的情况就是 $1\sim n$ 全部死亡的步数大于 $2\sim n$ 全部死亡的步数的情况,这时两者的差的期望就是不断挑一个猎人杀死直到1死亡的期望步数,即 $\dfrac{1}{p_1}$
那么 $1$ 最后死的概率就是 $\dfrac{f_1-f_2}{\frac{1}{p_1}}$
考虑 $\min-\max$ 容斥求出 $f_1,f_2$
$$ f_1=\sum_{T\subseteq \left[n\right],T\neq \emptyset}\left(-1\right)^{\left|T\right|-1}\dfrac{1}{\sum_{i\in T}p_i} $$
由于 $\sum_{i\in T}p_i$ 只有可能是 $\dfrac{1}{\sum w_i},\dfrac{2}{\sum w_i}\dots \dfrac{\sum w_i}{\sum w_i}$,分治NTT背包算出所有的项即可
计数旋转不同构的环的个数:
令 $G_n,F_{m,n}$ 分别表示长度为 $n$ ,长为 $m$ 最短循环节为 $n$ 且旋转不同构的环的方案数
则 $F_{m,n}=G_n-\sum_{d\mid n,d< n}d\cdot F_{m,d}$
集合幂级数
集合幂级数把集合作为幂级数上指标,可以方便的处理集合交集合并集合不交并等问题
当定义乘法为无交并,求多项式复合集合幂级数时,则是利用了这个多项式在复合集合幂级数的占位多项式时,每一项均会在集合有交时溢出,因此是正确的
对于特殊的多项式,可以求导 $\mathcal{O}\left(n^2\right)$ 完成单次复合,例如 $\exp,\ln$
对于一般多项式,只能对幂级数进行牛顿迭代
对于图的所有生成子图,求连通块个数的阶乘之和 $\left|V\right|\le 20$
假设连通块的集合幂级数是 $f_{S}$,原图的生成子图的集合幂级数是 $g_S$,那么 $g_S=\sum_{i\ge 0}\dfrac{f_S^i}{i!}=\exp\left(f_S\right)$,因为一个集合的集合会被统计大小的阶乘次
那么随后假设答案的集合幂级数是 $h_S$,那么 $h_S=\sum_{i\ge 0} f_S^i=\dfrac{1}{1-f_S}$,即答案就是对原图的生成子图的集合幂级数复合 $\dfrac{1}{1-\ln}$
直接容斥的话,我们假设钦定了 $i$ 个连通块之间互不连边
那么容斥系数满足 $\displaystyle\sum_{k\le i}\left\{\begin{matrix}i\\k\end{matrix}\right\}f_k=i!$
$\mathcal{O}\left(n^2\right)$ 递推然后 $\mathcal{O}\left(n^22^n\right)$ 复合即可
给定一张图,对于所有翻转一个边的子集使得图无环的方案数,求翻转的边的方案数的总和 $\bmod 998244353$,$\left|V\right|\le 18$
首先注意到对于一个 $DAG$ ,翻转其所有边后依旧是一个 $DAG$,因此我们可以将翻转的方案数乘以 $\dfrac{\left|E\right|}{2}$ 得到答案。
首先枚举一个当前点集 $S$ 的子集 $T$ 作为入度为 $0$ 的点,那么 $T\rightarrow S$ 的边都是确定方向的,且 $T$ 是一个独立集
那么 $\displaystyle f\left(S\right)=\sum_{T\subseteq S,T\ne \emptyset}\left[T是独立集\right]f\left(S\backslash T\right)$
那么令独立集的集合幂级数是 $g_S$,那么 $f_S=g_S\cdot f_S +1$,$f_S=\dfrac{1}{1-g_S}$,求逆即可
Burnside 引理
对于置换群 $G$ 和着色集合 $\mathcal{C}$ ,满足 $G$ 作用在 $\mathcal{C}$ 上,即 $\forall f\in G,c\in \mathcal{C},f\ast c\in \mathcal{C}$
则 $\mathcal{C}$ 中非等价着色数,即等价类的个数,为 $\dfrac{1}{\left|G\right|}\sum\limits_{f\in G}\#\left\{c\mid c\in \mathcal{C},f\ast c=c\right\}$
即 $G$ 中每个置换下不变的着色数的平均值。
例:Project Euler 781 Feynman Diagrams 改
给定正整数 $n$ ,求无标号的 $n+2$ 个点的混合图个数。$\bmod 10^9+7$
- 恰存在一个点没有无向边相邻,恰有一条有向出边,没有有向入边
- 恰存在一个点没有无向边相邻,恰有一条有向入边,没有有向出边
- 剩下的点中无向边构成一个匹配,每个点恰有一条有向出边,一条有向入边,有向边无自环
换句话说,有向边构成一条链和若干个环。$n\le 5000$
原题是弱联通,有简单做法,所以看看不弱联通的情况
首先可以发现任意一个费曼图对 $2n$ 阶对称群封闭。
对于 $2n$ 阶对称群的任意一个置换 $f$ ,有向链以及与有向链弱联通的哪些点都只能由 $f$ 中的不动点构成。
发现,对于若一条有向边连接 $f$ 中的同一个循环内的两个点,则这条边在这个循环上的 “步长” 可以是 $1$ 到环长 $-1$ 中的任意一个数
若一条有向边连接 $f$ 中的两个循环,假设是 $u_1,u_2\cdots u_n$ 和 $v_1,v_2\cdots v_m$,其中 $n\ge m\ge 2,u_1\rightarrow v_1$,那么存在边 $u_2\rightarrow v_2,u_3\rightarrow v_3,\cdots$
如果 $n\ne m$,那么存在边 $u_{m+1}\rightarrow v_1$,矛盾!
因此 $n=m$ ,若一条无向边连接 $f$ 中的一个循环中内部的一对点,那么这个循环长度只能是偶数,且无向边连接的是直径。
若连接 $f$ 中的两个循环,则 $n=m$ ,证明同理。
因此,假设恰好有 $k$ 个长度为 $n$ 的循环,那么种类数有:
$$ \begin{aligned} \left\{\begin{array}{}\displaystyle \left[2\mid k\right]\left(k-1\right)!!n^{\frac{k}{2}}\left(\sum_{i=0}^{\frac{k}{2}}\binom{k}{2i}\left(2i-1\right)!!n^i\left(n-1\right)^{k-2i} \right)&n\equiv 1\bmod 2\\ \displaystyle\left(\sum_{i=0}^{\frac{k}{2}}\left(2i-1\right)!!\binom{k}{2i}n^i\right)\left(\sum_{i=0}^{\frac{k}{2}}\binom{k}{2i}\left(2i-1\right)!!n^i\left(n-1\right)^{k-2i}\right)&n\equiv 0\bmod 2\end{array}\right. \end{aligned} $$
直接背包转移即可,最后转移的时候还要乘上一个
$$ \binom{j}{ik}\left(\prod_{t=1}^{k}\binom{it-1}{i-1}\left(i-1\right)!\right) $$
为选 $k$ 个长度为 $i$ 的环的方案数,时间复杂度 $\mathcal{O}\left(n^2\log_2n\right)$
常用技巧
规约问题,使规模减小
例:CF1580F Problems for Codeforces
求不同的长度为 $n$ 的数列 $a$ 使得 $\forall 1\le i<n,a_i+a_{i+1}<m$ 且 $a_1+a_n < m$,答案 $\bmod 998244353$ ,$2\le n\le 50000,1\le m\le 10^9$
首先观察到相邻两项 $a_i,a_{i+1}$ 必有一项 $<\frac{m}{2}$。
我们先假设 $n$ 是奇数,那么此时环上至少有一处 $a_i<\frac{m}{2},a_{i+1}<\frac{m}{2}$,那么我们从这些地方断开环,断成若干段首尾都 $<\frac{m}{2}$ 的段,
对于这些段,一定都是 $<\frac{m}{2}$ 和 $\ge\frac{m}{2}$ 交错的。
由于这些段减去 $\frac{m}{2}$ 后和相同长度,满足相邻两项和 $<\frac{m}{2}$ ,没有首尾限制的的数列一一对应,且段长必须是__奇数__
因此我们考虑计算出长度为 $i,1\le i\le n$,任意相邻两项和 $<m$ ,没有首尾限制的数列的数量
对于一个数列,如果没有相邻两项均 $<\frac{m}{2}$,那么这个数列必定是 $<\frac{m}{2},\ge\frac{m}{2}$ 交错,与相同长度,限制为 $<\frac{m}{2}$ 的数列一一对应,
否则断开均 $<\frac{m}{2}$ 的那些地方,首尾与长度为__偶数__,限制为 $<\frac{m}{2}$ 的数列一一对应,中间段与长度为__奇数__,且限制为 $<\frac{m}{2}$ 的数列一一对应。(中间段数可以是 $0$)
具体的来说,假设限制是 $<\frac{m}{2}$ 时的长为偶数的 $OGF$ 是 $A$ ,长为奇数的 $OGF$ 是 $B$,那么限制为 $<m$ 时的 $OGF$ 为 $\dfrac{A^2}{1-B}+B$
当 $n$ 偶数是,还可以从限制为 $<\frac{m}{2}$ 的环转移过来,多算一些东西即可。
注意实现细节
例:Project Euler 774 Conjunctive Sequences 改
对值域为 $\left[0,m\right]$ 的长度为 $1,2\cdots n$ 的数列和环计数,使得相邻两项的按位与都不是 $0$,环要求旋转不同构,答案 $\bmod 998244353$。$1\le n\le 10^5,1\le m< 2^{30} $
先考虑链怎么做
首先容斥,考虑对长度为 $1,2\cdots$ 的相邻的两项不为 $0$ 的连续段的方案数计数。假设这个的 $OGF$ 是 $f$,那么答案就是 $\left[-x^n\right]\dfrac{1}{1+f}$
把 $\le m$ 变成 $<m+1$ ,然后考虑怎么将值域规约成规模减半的问题。下面假设 $m$ 就是原来的 $m+1$。
如果 $m$ 这一位是 $0$,那么相当于把 $\frac{m}{2}$ 的每段连续段乘上最后一位放 $0,1$ 的方案数使得没有两个 $1$ 相邻。
如果 $m$ 这一位是 $1$,那么一段合法的段就是由 $m-1$ ,限制为 $\frac{m}{2}$ 的合法段交替形成。此时规约到 $\frac{m}{2}$ 的合法段有一个限制是,这个序列的两端都是 $0$,这个序列的一端是 $\frac{m}{2}$ 另一端是 $0$,或者两端都是 $\frac{m}{2}$。
于是我们对于限制为 $m$ 的算出三个 $dp$ 数组 $f,g,h$,分别表示两端无限制,一端有限制,两端均有限制的方案数。
设辅助数组 $dp_i$ 表示到第 $i$ 位,且第 $i$ 位是 $m-1$ 的方案数。
$$ \begin{aligned} dp_i&=g_{i-1}^{\prime}\cdot F_{i-1}+\sum_{j=1}^{i-1} dp_{j}\cdot h_{i-j-1}^{\prime}\cdot F_{i-j-1}\\ f_{i}&=f_{i}^{\prime}\cdot F_{i}+\sum_{j=1}^{i}dp_j\cdot g_{i-j}\cdot F_{i-j} \end{aligned} $$
$g,h$ 同理计算即可。然后使用多项式求逆和卷积进行优化
复杂度 $\mathcal{O}\left(n\log_2n\log_2m\right)$
计算贡献
有一个长度为 $n+m$ 的 $01$ 序列,其中有 $n$ 个 $1$,$m$ 个 $0$ ,在所有可能情况中等概率随机,询问 $n+m$ 次,每次询问序列的第 $i$ 位,回答 $\left\{0,1\right\}$ 中的一个数,然后会给出第 $i$ 位的正确值,求最优策略下期望答对多少个。
假设当前剩下有 $p$ 个 $0$ 和 $q$ 个 $1$,且 $p\le q$
那么当 $p\ne q$ 时下一位是 $0$ 时概率是 $\dfrac{\binom{p+q-1}{p-1}}{\binom{p+q}{p}}=\dfrac{p}{p+q}$ ,下一位是 $1$ 的概率是 $\dfrac{q}{p+q}$,回答 $1$ 更优
如果直接对上面这个东西计数是没法做的,考虑这个东西的几何意义
假设整个过程是从 $\left(n,m\right)$ 往左下走到 $\left(0,0\right)$ ,当前位于 $y=x$ 上时期望获得 $\frac{1}{2}$,当在 $y=x$ 上方时回答 $0$ 更优,下方时回答 $1$ 更优
假设有个走的子串是从 $\left(i,i\right)$ 走到 $\left(j,j\right)$,中间不经过 $y=x$,那么除了第一步以外所有回答必一样,都是 $0/1$,而这个子串在对应方向上走了 $j-i$ 步
那么贡献是 $j-i$,因此总的贡献就是 $\max\left(n,m\right)+E\Big($ 与 $y=x$ 的交点的个数 $\Big)\times \dfrac{1}{2}$ .
继续拆贡献,对于 $y=x$ 上的每个点计算经过其的概率即可。
构造双射
例:求证:
$$ \prod_{i=1}^{\infty}\dfrac{1}{1-z^i}=\sum_{i=1}^{\infty}\dfrac{z^{i^2}}{\prod_{k=1}^i\left(1-z^k\right)^2} $$
首先可以知道左边是划分数的 $OGF$。注意到右边是 $z^{i^2}$,所以考虑正方形
把划分数对应的 $\mathrm{Ferrers}$ 的图画出来,考虑左上角最大的正方形,即按照 $y=-x$ 最远能延申到哪里,假设正方形边长为 $i$
那么正方形下侧和右侧都是一个每一项 $\le i$ 的单调不降序列,这样的一组 $i$ 的方案和划分一一对应
因此右边等于左边。
对于所有长度为 $n$ 的序列 $a$,使得 $\sum\left[a_j\ge i\right]\le n-i+1$ 且 $a_i\in \left[1,n\right]$,求 $\sum_{i}\left(\sum_{j}\left[a_j=i\right]\right)^k$
令 $c_i=\sum_j\left[a_j=i\right]$ ,那么每种不同的 $c_i$ 序列对方案数的贡献是 $\frac{n!}{\prod c_i!}$,对答案的贡献是 $\frac{n!}{\prod c_i!}\cdot\sum c_i^k$
考虑构造方案数到 $n+1$ 个点的有标号有根树(根为 $1$)的双射。
令 $dfs$ 序为按照子节点编号从小到大访问,$s_i$ 为 $dfs$ 序的第 $i$ 个点的儿子数。
那么对于 $\forall 1\le j\le n$,若 $\sum_{i\le j} s_i<n$ ,那么前 $j$ 个点构成了一颗虚树,矛盾!
所以 $s_i$ 是一组合法的 $c_i$
对于任意一组合法的 $c_i$,我们贪心的构造,如果当前节点还有剩余的空位,就往下接,否则往上跳父亲找到第一个合法的位置。
对于不同的 $c_i$ 树的形态互不相同,对于相同的 $c_i$,树的形态有 $\frac{n!}{\prod c_i!}$ ,那么方案数和有根树一一对应。
那么原题所求的和有标号,$1$ 根树一一对应,也和有标号,无根树一一对应。
后面的还不会,先不写了
一些杂题
求将 $n\times m$ 的网格二染色的方案数,使得对于每一行的黑格子个数不为 $0$ 且位置连续,每一列的白格子个数不为 $0$ 且位置连续,且$1\le n,m\le 2021 $
由题意得,黑色和白色的格子不可能同时都联通
两者均不联通当且仅当排列成了类似风车型的形状,我们定义此时黑色联通
黑色联通时,一定存在一列 $i$ 使得:$\le i$ 的列的白色联通,$>i$ 的列的白色也联通,这时左右的白色连通块每一行都是贴着边缘的
由于黑色联通,第 $i,i+1$ 列的白色一定不相邻,假设此时左边在上,右边在下
设第 $i$ 列最低的白色是第 $p$ 行,第 $i+1$ 列最高的白色是第 $q$ 行,则 $p> q$
令此时左侧第 $i$ 行白色的宽度为 $l_i$,右侧第 $i$ 行白色的宽度为 $r_i$
那么即统计 $0\le l_1\le l_2\le \cdots \le l_p =i>l_{p+1}\ge l_{p+2}\cdots \ge l_{n}\ge 0 $ 的方案数乘上 $0\le r_1\le r_2\le \cdots \le r_{q-1}<n-i=r_{q}\ge r_{q+1}\ge \cdots r_{n}\ge 0$
方案数即为 $\binom{ i+p-1}{p-1}\binom{i-1+n-p}{n-p}\binom{n-i+n-q}{n-q}\binom{n-i-1+q-1}{q-1}$ ,一边和 $p$ 有关另一边和 $q$ 有关前缀和即可
最后答案要乘以 $2$ ,因为假设了 $p>q$ ,白色联通同理,只是 $p> q+1$
给定 $n,k$ ,和长度为 $n$ 的序列 $b$,求有多少不同的序列 $a$ 满足 $0\le a_i\le n,\left|\operatorname{mex}\left(\left\{a_1,a_2\cdots a_i\right\}\right)-b_i\right |\le k$ ,其中 $1\le n\le 2000,0\le k\le 50,-k\le b_i\le n+k$ 。答案 $\bmod 998244353$
首先我们有一个很显然的 $dp$ ,$f_{i,j,k}$ 表示枚举到 $a_i$,$\operatorname{mex}$ 为 $j$,且有 $k$ 个位置大于 $\operatorname{mex}$ 的方案数,然后转移,但是这样复杂度过高
我们发现复杂度主要在枚举大小为 $t$ 占了 $k$ 中的几个,所以我们将状态替换为表示大于 $\operatorname{mex}$ 的有多少种值不同的位置。
转移就变为了
$$ f_{i,j,k}=\sum_{t< j}\binom{k+j-t-1}{j-t-1}f_{i-1,t,k+j-t-1}+f_{i-1,j,k}\cdot j +f_{i-1,j,k}\cdot k+ f_{i-1,j,k-1} $$
其中第一项转移可以用前缀和优化,总复杂度为 $\mathcal{O}\left(n^2k\right)$
有一个二分图,两侧各有 $n$ 个点,左侧第 $i$ 个点向右侧前 $a_i$ 个点连了无向边,求简单环的个数 $\bmod 998244353$
首先左侧的点是没有顺序的,因此我们可以先把 $a_i$ 排个序
考虑对于一个环在左侧前 $i$ 个点和右侧前 $a_i$ 个点形成的子图里是长什么样的。
假设这个环不全在里面,那么在这个图里就是若干段链,每段链首尾都是右侧点,且每段右侧左侧点交替
那么就可以 $dp$ 了,状态为 $f_{i,j}$ 表示右侧前 $i$ 个点有 $j$ 条链的方案数,这样我们只需要在 $a_j=i$ 的时候加入点 $j$ 就行了
转移时新加入的点可以单独成立一条链或者什么都不做,点 $j$ 可以合并两条链或者什么都不做。
复杂度 $\mathcal{O}\left(n^2\right)$
给定 $n,m$ ,和长为 $n$ 的数列 $x$ ,以及长为 $m$ 的数列 $y$,下标均从 $0$ 开始
令变量 $a$ 初始时为 $a_0$,对其做 $n\times m$ 次操作(下标也从 $0$ 开始),第 $i$ 次把 $a$ 变成 $a,x_{i\;\bmod \;n},y_{i\;\bmod\;m}$ 的中位数。给定 $V$ ,求对于所有值域在 $\left[1,V\right]$ 中的数列 $x,y$,$a$ 最后的值的和。
首先我们把 $a$ 变成 $\sum_{i\ge 0} \left[i<a\right]$
按 $\le v$ 把所有数变成 $0,1$ ,每次中位数的操作即使对三个数取众数
可以发现,只有当每次操作是 $0,1$ 和 $a$ 时 $a$ 的值才会不变,否则 $a$ 的值和初始值无关。
有个很重要的性质是,当结果和 $a$ 无关时,结果为 $0$ 和 $1$ 的个数是相同的,因为如果对所有 $x,y$ 取反结果就会取反
当每次操作是 $0,1$ 和 $a$ 时,令 $g=\gcd\left(n,m\right)$,那么对于 $k=0,1\dots g-1$ ,$x_{k},x_{k+g},\dots x_{n-k+g}$ 和 $y_{k},y_{k+g},\dots y_{m-k+g}$ 两两会和 $a$ 组合一次
因此要么这一组 $x$ 都是 $1$,$y$ 都是 $0$ ,或者这一组 $x$ 都是 $0$ ,$y$ 都是 $1$,因此方案数是 $\displaystyle\left(v^{\frac{n}{g}}\left(V-v\right)^{\frac{m}{g}}+v^{\frac{m}{g}}\left(V-v\right)^{\frac{n}{g}}\right)^g$
有一个长为 $n$ 的 $01$ 字符串 $S$ ,给定 $S$ 的第 $i$ 位是 $0$ 的概率 $p_i$,求期望最少删掉几个字符,使得 $10$ 不是剩下的字符串的一个子序列,对 $998244353$ 取模
$1\le n\le 3\times 10^5$
首先原问题等价于 $n-$ $s$ 中最长不下降子序列的长度
如果 $p_i$ 均为 $\frac{1}{2}$,即 TROC-20 G Superstring Ordinal
我们枚举 $s$ 最长不下降子序列中 $0/1$ 交界的位置,并钦定这是可能的位置里最靠后的一个点
那么假设这个点是 $i$,则从 $i$ 开始的任意一段子串中 $1$ 的个数都必须严格大于 $0$ 的个数,否则 $i$ 一定不优。
且以 $i$ 为结尾的任意一段子串中 $0$ 的个数必须大于等于 $1$ 的个数,否则 $i$ 也一定不优
此时是一个类似卡塔兰数的结构。
对于一个 $1,-1$ 组成的长度为 $k$ 的序列,任意前缀和 $\ge 0$ 的方案数为
$$ \sum_{i=\left \lceil\frac{k}{2}\right \rceil}^{k}\left(\binom{k}{i}-\binom{k}{i+1}\right)=\binom{k}{\left \lceil \frac{k}{2} \right \rceil} $$
任意前缀和 $\ge 0$ 的序列中 $1$ 的个数总和为
$$ \sum_{i=\left \lceil\frac{k}{2}\right \rceil}^{k}i\left(\binom{k}{i}-\binom{k}{i+1}\right)=\sum_{i=\left \lceil\frac{k}{2}\right \rceil}^{k}\binom{k}{i} +\binom{k}{\left \lceil \frac{k}{2} \right \rceil}\cdot \left(\left \lceil \frac{k}{2} \right \rceil-1\right) $$
均可以 $\mathcal{O}\left(1\right)$ 计算,总复杂度 $\mathcal{O}\left(n\right)$
对于原问题,将 $0$ 看作 $1$ ,$1$ 看作 $-1$ 以后最长不降子序列等于 $1$ 的个数加上前缀最大值,前面一部分是容易计算的,对于后面一部分,我们对于每个 $i$ ,计算出前缀最大值 $\le i$ 的概率,即可计算答案。时间复杂度 $\mathcal{O}\left(n^3\right)$
然后考虑一个反悔贪心,先把所有的 $1$ 作为答案,维护一个计数器表示当前 $1$ 的个数减 $0$ 的个数,每当计数器变成 $-1$ 的时候翻转上一次计数器清零的位置到当前位置的这段区间,并将计数器清零,答案加 $1$
具体维护 $f_{i,j},g_{i,j}$ 表示到第 $i$ 位,计数器为 $j$ 时候的概率和答案的期望。
时间复杂度 $O\left(n^2\right)$
考虑分治,假设我们当前分治区间为 $\left(l,l+k\right]$,已知 $f_{l,0}\sim f_{l,k-1}$,求其对 $f_{l+k,0}\sim f_{l+k,k-1}$ 的贡献
假设分治中点为 $l+t$ ,那么我们先计算出 $f_{l+t,0}\sim f_{l+t,k+t-1}$ 再计算出其对 $f_{l+k,0}\sim f_{l+k,k-1}$ 的贡献
对于左半部分, $f_{l,t}\sim f_{l+k}$ 对 $f_{l+t,0}\sim f_{l+t,t-1}$ 和 $f_{l,0}\sim f_{l,k-1}$ 对 $f_{l+t,t}\sim f_{l+t,k+t-1}$ 的贡献都可以由卷积直接得到而不会进行计数器重置的操作
而 $f_{l,0}\sim f_{l,t-1}$ 对 $f_{l+t,0}\sim f_{l+t,t-1}$ 的贡献可以继续分治得到
右半部分同理
时间复杂度 $T\left(n\right)=2T\left(\dfrac{n}{2}\right)+\mathcal{O}\left(n\log_2n\right)=\mathcal{O}\left(n\log_2^2n\right)$
给定一个长度为 $n$ 的排列 $p$。
令其中第 $i$ 个位置的权值为 $p$ 中最长的包含 $i$ 的连续自然数按顺序组成的区间的长度。例如,$p=\left[4,1,2,3,7,6,5\right]$ 中,第 $6$ 个位置的权值为 $\left[5,7\right]$ 的长度,第 $2$ 个位置的权值为 $\left[2,4\right]$ 的长度。
将这些权值依次拼在一起,就得到了 $p$ 的「阶梯序列」。
给定 $a$,你需要求出存在多少个 $p$,使得 $a$ 为 $p$ 的「阶梯序列」。答案对 $998244353$ 取模。(题意来自
luogu
)
给出的 $a_i$ 数组显然是形如 $a_1$ 个 $a_1$ ,$a_{a_1+1}$ 个 $a_{a_1+1}$ ,$\dots$ ,否则一定不合法,直接输出 $0$ 即可,那么原序列可以简化为 $b_1,b_2,\cdots b_m$
对于每个 $b_i$ ,如果不是 $1$ ,那么它可以是上升或者下降的,$2$ 种情况,但是如果是 $1$ 的话只有一种情况,因此我们只需考虑 $b_i$ 是否是 $1$ 即可。
如果不考虑每个 $a_i$ 是极长段的限制,那么总方案数就是 $2^{m-cnt_1}\cdot m!$,接下来考虑容斥。
如果 $b_1,\dots,b_m$ 被合并成了 $k$ 个连续段,容斥系数就是 $\left(-1\right)^{m-k}$
考虑如何把 $2^{m-cnt_1}$ 和 $m!$ 塞进转移式子里。
但是由于最后的方案数和 $k!$ 有关,因此 dp 时必须保留段数,但是可以直接将这一连续段的方案数乘进转移。
$$ \begin{aligned} f_{i,j}=\left\{\begin{matrix}f_{i-1,j-1}+2\sum_{k\le i-2} f_{k,j-1} &b_i=1\\\\2\sum_{k\le i-1} f_{k,i-1} &b_i\neq 1\end{matrix}\right. \end{aligned} $$
写成生成函数就是:
$$ \left[\begin{matrix}sum_{i-1}\\f_i\end{matrix}\right]=\left\{\begin{matrix}\left[\begin{matrix}1 &1\\x &2x\end{matrix}\right]\cdot \left[\begin{matrix}sum_{i-2}\\f_{i-1}\end{matrix}\right] & b_i=1\\\\\left[\begin{matrix}1 &1\\2x &2x\end{matrix}\right]\cdot \left[\begin{matrix}sum_{i-2}\\f_{i-1}\end{matrix}\right] & b_i\neq1\end{matrix}\right. $$
分治用 NTT 算矩乘即可。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。