【笔记】计数选讲:容斥、LGV、SPS、GF 2024.8.2
今天写的很乱。
[HEOI2013] SAO
容斥。因为我们已经知道父亲 \(<\) 儿子时的情况(\(n!/\prod_i siz_i\),也适用于森林),那么儿子 \(<\) 父亲的情况就容斥掉,无限制的就当作那条边不存在。树上背包,记录当前节点为根的连通块大小和容斥系数的积。
*[ECFinal23A] DFS Order 4
转写为:统计多少个有根树,满足
- 父亲小于儿子;
- 儿子之间有序;
- 节点要比它的上一个兄弟的最后一个儿子小。
显然和 dfn 序形成双射。在边上画不等号,容斥,尝试转化为上一题的 \(n!/\prod_i siz_i\)。钦定一些边断掉,改成根向树拓扑序计数的形式,统计 \(1/\prod_i siz_i\) 带上一堆容斥系数。转移可以按照深度和子树大小转移,由深至浅,由小到大。
[AGC020F] Arcs on a Circle
钦定最长的弧,破环为链。将随机坐标拆开成随机整数部分和随机小数部分,枚举小数部分的大小关系(\((n-1)!\) 种情况出现概率相同),然后状压 DP。因为已经知道小数部分的大小关系,于是可以知道两端弧是否交了。
[AGC036F] Square Constraints
画一个平面直角坐标系,相当于在一个扇形里选出排列。已经知道,如果每个位置能选的是一段前缀 \(a_1\leq a_2\leq\cdots\leq a_n\),那么答案就是 \(\prod_i (a_i-i+1)\)。所以尝试将排列左半边的区间限制容斥成前缀限制,需要先钦定有多少个被容斥成最长条的,然后就可以知道排名了。\(O(n^3)\)。
*无标题
对每个 \(x,y\),求有多少个长度为 \(n\) 的排列,满足有 \(x\) 个 \(p_i>i\),有 \(y\) 个 \(p_i>p_{i+1}\)。\(n\leq 60\)。
考虑每一个大于的连续段,被 \(p_i=i\) 的直线切开两半,发现这些数能选的又是一个区间,也可以沿用上一题的套路容斥。大小关系按照从小到大和从大到小同时。同一段的方案数可以选完再除一个阶乘。
好像后面还要优化啊
*[AGC039F] Min Product Sum
先找所有最小值,钦定它们所在的行列,划去它们,递归到子问题。可以 dp。可以对方案数容斥,\((\min=v)=(\min\geq v)-(\min\geq v+1)\)。可以分步 dp,将过程拆成多步。最终可以做到 \(O(n^4)\)。
好像不是这个东西啊
*[UNR #7] 璀璨宝石
UOJ NOI Round #7 题解 - 博客 - qingyu的博客
完全掉线
这里有一个 LGV 题
\(n\times n\) 网格内填 \(1\sim n\) 使得每个格子的数小于等于其上面的格子和其右边的格子。求方案数。
看成不互穿的路径,这些路径将整个矩形划分,第 \(i\) 条路径和第 \(i+1\) 条路径之间填上权值 \(i+1\)。不互穿路径太草了,第 \(i+1\) 条路径向右上两个方向平移 \(i\) 单位长度,然后就能 LGV Lemma。
*[QOJ3082] Ascending Matrix
不会
[2021 集训队互测 Round 2] Imbalance
\(k\leq 20\) 运行状压 DP。
\(k>20\),将 \(1\) 当作 \(+1\),\(0\) 当作 \(-1\)。首先发现如果 \(a[1,k]>0\) 那么以后所有长度为 \(k\) 的区间都有这个性质(否则会跨过去)。转为格路,看作这样的循环路径:
只要这些路径都不交就合法了。枚举起点位置,计算 \(O(k^{n/k})\) 个 LGV Lemma。
集合幂级数但是 mex 卷积
\(f(x, y)\) 接受两个三进制数,输出一个三进制数,其第 \(i\) 位是 \(x\) 的第 \(i\) 位与 \(y\) 的第 \(i\) 位的 \(\text{mex}\)。
给定两个长度为 \(3^n\) 的数组 \(a, b\),求 \(c_k=\sum_{f(i, j)=k}a_ib_j\) 每一项的值。\(n\leq 11\)。
点乘一下再变到答案:
\(O(4^n)\) 解决。
[2022-2023 集训队互测 Round 8] 环覆盖
欲求
\(x\) 上做异或的 FMT,已知
所以
又已知(\(IFMT(A)=FMT(A)/2^n\))
所以我们最终的答案肯定形如
\(c_t\) 这个系数可以 \(O(2^n)\) 求解。然后剩下的东西暴力求解。
关于如何 \(O(2^n)\):本题无重边,于是你枚举所有集合,取一个点加入,用一个 popcount
与一下。
标准生成函数题
给定⼀个字符串 \(s\) 和字符集大小 \(r\),询问有多少个长度为 \(n\) 的字符串不包含 \(s\) 作为子串。\(n\leq 2\times 10^5\)。
第一步要容斥,钦定 \(S\) 在某些位置出现。\(S\) 出现以后可能还会有 \(S\) 接着出现,但一定是与 border 有关的。
令 \(|S|=m\),它有 border \(c_1, c_2, \cdots, c_k\),令 \(C(z)=\sum_{i=1}^kz^{m-c_i}\) 表示它的 border 的生成函数。
那么答案的生成函数为 \(SEQ(rz-z^mSEQ(-C(z)))\)。\(-1\) 都是容斥系数。直接计算即可。
[UR #19] 通用测评号
钦定我们的操作可以选任何数,我们计算有一个数 \(\geq a\) 的概率,输出时 \(\times n\)。
钦定最后一步操作 \(a_1\)。可以用 EGF 刻画操作序列。需要广义二项式定理。很机械,以前是做过这样的东西的。
最终 \(O(n^4)\)。
方格染色但是加强
\(n\times n\) 网格,初始全为白色,执行 \(m\) 次操作:染黑⼀条横线/染黑⼀条竖线/染黑⼀条斜线(斜率 \(=1\))。
问操作后有多少个黑格。\(n\leq 2\times 10^5\),拒绝 \(O(n^2/w)\)。
直线:可以记 \(a_x\) 表示 \(x\) 这一行是否没有染黑。\(b_y, c_{x-y}\) 同理,那么我们欲将统计 \(a_x=b_y=c_{x-y}=1\) 的数量。改写下标为 \(a'_x=b'_{n-y}=c'_{n-x+y}=1\),求 \(a'b'c'\) 的乘积取 \(2n\) 次系数。
线段:以 \(\sqrt n\times \sqrt n\) 大小分块,每一块内跑上面的算法,还有一些散的可以轻易解决。\(O(n\sqrt n\log n)\)。优化考虑到多项式仅修改一项系数,它的 FFT 可以线性修改(考察其定义);同理,我们提取 \(2n\) 次系数也可以线性(也考察其定义)。于是因为只有 \(O(m)\) 次线性(关于 \(O(\sqrt n)\) 的长度成线性)的修改,复杂度为 \(O(n\sqrt n)\)(不区分 \(n,m\))。
[CCPCF23B] Periodic Sequence
策略是首先写一个长度为 \(n\) 的字符串,然后每次将其无限复制,取最长的没出现过的前缀。于是所有能生成的字符串形如:有一个长度为 \(k\) 的初始字符串的前缀,后面接着很多长度 \(\leq k\) 的初始字符串的前缀。我们只需要计数这些字符串。
生成函数显然为:
后面还有几步就能观察到可以根号分治,还没推。\(O(n\sqrt n)\)。
[Hangzhou23B] Festival Decorating
可以分成 \(O(\log n)\) 段做 \(O(\log n)\) 次差卷积。
卷积构造:使 \(x_u, x_v\) 向 \(x_v-x_u\) 贡献 \(c_uc_v(c_u-c_v)^2\)(保证它们颜色不同时贡献不为零,同时不会误判到无灯的地方)。
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/18338849