组合数学乱写

临时抱佛脚

还是一样,模板都有标记


P3197

减法原理。

\(m^n - m(m-1)^{n-1}\)

记录

P2822

被 k 整除相当于膜 k = 0, 所以直接做。

P2290【prufer序列】

直接 prufer 序列, 度数为 d 相当于在 prufer 序列中出现 d-1 次, 所以直接可重集排列。

darkbzoj记录】全是小数据耶

lg86pts】说好的答案 \(\le 10^{17}\) 呢?

P3807【lucas 定理】

背板子,

\[\binom nm\mod p = \binom{\lfloor n/p\rfloor}{\lfloor m/p\rfloor}*\binom{n\mod p}{m\mod p}\mod p \]

记录

P7044

题面似曾相识(

考虑某个子串对最终答案的贡献。

\(p_{l,r,k}\) 表示子串 \([l,r]\)\(k\) 级偏值。

那么:

\[p_{1,n,k} = \underbrace{\sum_{1\le l_{k-1}\le r_{k-1}\le n}\sum_{l_{k-1}\le l_{k-2}\le r_{k-2}\le r_{k-1}}\cdots\sum_{l_{1}\le l_0\le r_0\le r_1}}_{k个\sum} p_{l_0,r_0,0} \]

那么对于一个固定的 \(l_0,r_0\), 来算一下它对整个答案的贡献。

这个就是 \(1,l_{k-1},\dots, l_0\) 这边和 \(r_0,r_1,\dots,n\) 这边的情况, 是本质一样的问题。

以前者为例,这个其实就是 \(x_k+x_{k-1}+\cdots+x_1 = l_0-1\) 的非负整数解。(这里的每个变量都表示某个 \(l_{i+1}-l_i\), 即左边的 l 到右边的 l 的距离,总的来说,说得随便一点就是从 \(1\) 开始不断加 \(\Delta\) 要正好到达 \(l_0\)

那么:

\[p_{1,n,k} = \sum_{1\le l\le r\le n}p_{l,r,0}\binom{l+k-2}{k-1}\binom{n-r+k-1}{k-1} \]

继续考虑 \(p_{l,r,0}\), 这个就是对区间做一次括号匹配后无法匹配的括号总个数。

然后这个怎么算呢

这个牛逼式子或许可以分治算,但我没深入想, 还是想题解里提出的枚举一个数据维护一堆东西的做法。

这个做法必须要能计算一个括号对于一堆 \(p_{l,r,0}\) 的贡献。

但是这里说的 “贡献” 太谜语人了, 需要进一步考察。

首先序列括号匹配的基本事实是, 整个序列的所有单个括号, 如果其有匹配的括号, 那么这个括号是一定的, 能否找出这对括号, 只取决于扫描的区间是否覆盖了这对括号。

现在考虑从 \(l\) 扫到 \(r\) 做一次括号匹配。

再明确一些事实:

  1. 如果从 \(l\) 开始从左往右扫括号匹配, 某个位置 i 的 ) 可以得到匹配, 那么在固定 \(r\) 的情况下,从小于 \(l\) 的位置开始扫也可以得到匹配,。
  2. 如果扫到 \(r\) 可以使某个位置 \(i\)( 可以得到匹配, 那么在固定 \(l\) 的情况下, 扫到大于 \(r\) 的位置也可以得到匹配

所以先考虑从 1 扫到 n 进行括号匹配, 对于第 i 个位置, 设 p(i) 为与 i 上的括号匹配的括号的位置。

那么考虑 i 上是左括号, 会对哪些区间产生贡献, 依据上面的分析, 是左区间在 \([1,i]\), 右区间在 \([i,p(i)-1]\) 的所有区间;考虑 i 上是右括号, 则是右区间在 \([i,n]\), 左区间在 \([p(i)+1,i]\) 的所有区间。

所以如果考虑从 1 到 n 枚举 r,然后维护 \(\sum\limits_{1\le l\le r}p_{l,r,0}\dbinom{l+k-2}{k-1}\) , 就可以:

如果当前是左括号, 当前维护的区间都要加上 1 的贡献,然后到 p(i) 时取消。

如果是右括号, 则对 \(l\)\([p(i)+1,i]\) 的区间加上贡献,不取消。

记录

P2480

\[ans = g^{\sum_{k\mid n}\binom nk} \mod 999911659 \]

显然指数高精都存不下, 考虑欧拉定理。

由于膜数是质数, 所以只要算 \(\sum_{k\mid n}\binom nk\mod 999911658\) 就可以快速幂了。

这个数是个偶数, 将其质因数分解, 得到的结果是 \(2\times 3\times 4679\times35617\)

可以直接分别计算然后 CRT 合并。

记录看我优美代码!

P4769【折线法】

不考虑字典序的限制, 等价于求最长下降子序列的长度不超过 2 的排列的数量。

考虑 dp, 设 \(f_{i,j}\) 为从左扫描到了第 i 个, 最大值为 j 且合法的方案数。

考虑接下来放在 i+1 的那个数, 如果大于 j, 那么显然可以, 如果小于 j, 那么就恰好形成了一个长度为 2 的下降子序列, 进而, 再放更小的话, 就不合法了, 所以如果小于 j, 应该放最小的, 但是会不会让原本合法的序列不合法?不会的, 因为这样的话说明在前面的决策点没有遵循小于 j 的放最小的决策原则。

所以,

\[f_{i,j} = \sum_{k=i-1}^j f_{i-1,k} \]

也可以写成

\[f_{i,j} = f_{i,j-1} + f_{i-1,j} \]

这等价于只可以向右或向上走,从 \((0,0)\) 走到 \((i,j)\), 且一直在直线 \(y=x\) 上方的方案数。

现在加上字典序的限制, 枚举第一次高于限制的位置 i,计算答案。

现在若要计算从 \((i,j)\)\((n,n)\) 的不计字典序限制的方案数, 可以采用折线法。

具体来说, 第一次走到 \(y=x\) 下方等价于第一次接触到 \(y=x-1\) 这条直线, 将路径沿着这条直线翻折, 发现相当于一个从对称后的起始点走到 \((n,n)\) 的方案, 直接算这种方案数就等于不合法的方案数。

(x,y) 在与 y = x-1 对称后变为 (y+1,1-x)。

记录

P4931

首先选出 k 对情侣让他们乖♂乖♂坐♂好♂, \(\dbinom nk\dbinom nkk! 2^k\)

然后剩下的错排, 设 \(f_n\) 为 n 对都不匹配的方案数。

考虑第一排座位, 选出一对不是情侣的, 有 \(2n\times (2n-2)\) 种选法, 然后考虑这一对各自的情侣, 如果坐在一起, 就是 \(2\times (n-1)\times g[n-2]\), 反之, 就是相当于这两个是情侣(不能坐在一起), 就是 \(g[n-1]\), 所以:

\[g[n] = 2n\times(2n-2)\times(2(n-1)g[n-2]+g[n-1]) \]

预处理之后在线回答询问就行了。

记录

P2532【卡特兰数】

推理过程

高精先不写。

P5395【第二类斯特林数 · 行】

第二类斯特林数有一个性质:

\[m^n = \sum_{i=0}^m{n\brace i}\binom mi i! \]

组合意义的证明:左边是把 n 个不同的数放在至多 m 个不同的集合的方案数, 右边则是枚举放在了多少个集合里, 然后选出药放的集合, 然后放, 然后标号。

由二项式反演:

\[{n\brace m}m! = \sum_{i=0}^m(-1)^{m-i}\binom mi i^n\\ {n\brace m} = \sum_{i=0}^m\frac{(-1)^{m-i}}{(m-i)!}\times \frac{i^n}{i!} \]

卷积即可。

记录

P6620【O(n2)普通幂转下降幂】

首先 n 这么大肯定要交换求和号

\[\sum_{k=0}^n f(k)\times x^k\times\binom nk\\ \sum_{k=0}^n x^k\binom nk\sum_{i=0}^m a_ik^i\\ \sum_{i=0}^m \sum_{k=0}^n x^k\binom nka_ik^i \]

可以把 \(f(k)\) 转成下降幂多项式。

\[\sum_{i=0}^m \sum_{k=0}^n x^k\binom nkb_ik^{\underline i}\\ \sum_{i=0}^m \sum_{k=0}^n x^k\binom nkb_i\binom ki i!\\ \sum_{i=0}^m \sum_{k=0}^n x^k\binom nib_i\binom {n-i}{k-i} i!\\ \sum_{i=0}^m i!b_i\binom ni \sum_{k=0}^n x^k\binom {n-i}{k-i}\\ \sum_{i=0}^m i!b_i\binom ni x^i \sum_{k=i}^n x^{k-i}\binom {n-i}{n-k}\\ \sum_{i=0}^m i!b_i\binom ni x^i \sum_{k=0}^{n-i} x^{n-k-i}\binom {n-i}{k}\\ \sum_{i=0}^m b_in^{\underline i} x^i (x+1)^{n-i} \]

如此, 只要 \(O(n^2)\) 处理下降幂再 \(O(n^2\log w)\) 计算就行了。

转下降幂的方法:

\[x^i = \sum_{j=0}^i {i\brace j}x^{\underline j} \]

记录

P3200

稍加分析即可知道答案是卡特兰数。

\[h_n = \frac{\dbinom {2n}n}{n+1} \]

exLucas!

分解质因数就行了。

记录

CF814E

首先用 bfs 确立最短路树。

由于最短路树是唯一的,所以原图中没有连接在 bfs 树上深度不同的两个点的边。

由于最短路长度随编号递增,所以 bfs 树中同深度的节点的编号必定都是连续的一段。

区间 DP:

\(f(i,j)\) 表示只考虑前 i 个点的情况下, 第 i 个点所在深度有 j 个点, 且更浅的深度的点的度数的限制均被满足, i 的深度的点除了与父亲的连边都暂时不考虑, 方案数是多少。

\(g(i,j,k)\) 表示这一层有 \(i\) 个点, 上一层有 \(j\) 个度数为 2 的点, \(k\) 个度数为 3 的点, 满足上一层的度数限制的方案数。

那么转移就是:

\[f(i,j) = \sum_{1\le k< i - j}f(i-j,k)\times g(j,k_2,k_3) \]

其中, \(k2,k3\) 分别表示度数为 2 和为 3 的点。

最终答案:

\[ans = \sum_{1\le k\le n} f(n,k)\times g(0,k_2,k_3) \]

考虑计算 \(g\)

\(g(0,0,0) = 1\)

考虑 \(g(0,0,k)\), 只能靠层内成环实现,由于不能有重边,环还得是长度 >3 的:

\[g(0,0,k) = \sum_{l=3}^k g(0,0,k-l)\binom {k-l}{l-1}\frac{(l-1)!}2 \]

考虑 \(g(0,j,0)\), 只能靠层内配对实现, 进一步得到 \(2\mid j\), 考虑标号为 1 的点与谁配对:

\[g(0,j,0) = g(0,j-2,0)\cdot (j - 1) \]

考虑 \(g(0,j,k)\), 考虑一个度数为 2 的点, 它可以连接一个度数为 2 的点, 也可以连接一个度数为 3 的点:

\[g(0,j,k) = (j-1)\cdot g(0,j-2,k) + k\cdot g(0,j, k-1) \]

考虑 \(g(i,j,k)\), 考虑 i 个点中的一个, 它可以连接一个度数为 2 的点, 也可以连接一个度数为 3 的点:

\[g(i,j,k) = j\cdot g(i-1,j-1,k) + k\cdot g(i-1,j+1,k-1) \]

记录

bzoj 1005

明♂明♂的 fa♂ 恼♂

prufer 序列。

如下定义一个有标号无根树 \(T\) 的 prufer 序列:

选取 T 上标号最小的度数为 1 的点 x, 将与 x 相邻的点的标号加入好序列的末尾, 然后删去 x 和对应的边, 重复以上操作,直到树中只剩下 2 个点。

显然对于一个树, 用其生成的 Prufer 序列是唯一的。

接下来证明对于每个序列,都存在唯一对应的树。

初始令 \(G = \{1,2,\cdots,n\}\), 取 \(x = \min(G-Prufer)\), 将 x 与 Prufer 的第一项相连, 然后删去 Prufer 的第一项和 G 中的 x。

重复以上操作, 直到 Prufer 为空。

此时 \(|G| = 2\), 最后连接 G 中的两个点即可。

如此,得到的树一定是能生成这个 Prufer 序列的树。

显然若一个点 i 的度数为 \(d_i\), 那么它在 Prufer 序列中出现了 \(d_i-1\) 次。

那么对于原题, 求有多少个长度为 \(n - 2\) 的 Prufer 序列, 满足度数的限制。

无解显然很好判断, 有解也好判断。

Py♂thon♂ is♂ good♂。

对高精 PTSD, 不写了。

loj6244

由于一个 k 排列中有 x 个是正确的, 有 \(\dbinom kx\) 种方案, 剩下 k - x 个位置就可以看作是从 n-x 个元素的子集中选出 k-x 个排列, x = 0 的方案数。

使用容斥原理, 记命题 \(P_i\) 表示排列中 i 还在位置 i, 那么就是求不满足所有命题的方案数:

\[\sum_{j=0}^{k-x}(-1)^j\binom{k-x}j (n-x-j)^{\underline {k-x-j}} \]

代码就不写了。

bzoj 1089

考虑深度 \(\le d\) 的 n 元树的数目, 记为 \(f_d\)

那么显然按照符号化方法的思想, \(f_d = f_{d-1}^n + 1\)

\(f_d - f_{d-1}\) 即为最终的答案。

代码就不写了。

posted @ 2021-03-30 19:15  xwmwr  阅读(158)  评论(0编辑  收藏  举报