WC 2024
信息学竞赛中的持久化数据结构与技巧
CF1340F. Nastya and CBS
题目选讲
ARC151E. Keep Being Substring
如果 \(X\) 和 \(Y\) 的最长公共子串的长度 \(L>0\),那么答案就是 \(P+Q-2L\)。否则,最优方案一定是将 \(X\) 变成单个字符 \(c\),然后进行若干次在它前面或后面加入一个在原串中和 \(c\) 相邻的字符,再把 \(c\) 删去的操作。当 \(c\in Y\) 时,就可以扩展出 \(Y\) 了。
做多源汇 BFS 即可。时间复杂度 \(O(N)\)。
IOI 2023. Closing Time
称一个点的类型是它能被 \(\{X,Y\}\) 中的几个点到达。设 \(X,Y\) 间路径的点集是 \(S\)。只要整棵树上有一个 \(2\) 类型的点,那么 \(S\) 中的所有点都应当是 \(1,2\) 类型的。
不妨假设树上有至少一个 \(2\) 类型的点。此时,提前钦定 \(S\) 中所有点 \(u\) 都付出了 \(\min(\operatorname{dist}(u,X),\operatorname{dist}(u,Y))\) 的代价。将整棵树分为距离 \(X\) 更近和距离 \(Y\) 更近的两个连通块,此时的问题是:
对于每个点 \(u\),其可能有一个父亲 \(f_u\),表示 \(f_u\) 的类型需要大于等于 \(u\) 的类型。\(u\) 选择类型 \(i\) 有一个代价 \(c_{u,i}\),问在总代价不超过 \(K\) 的情况下,所有点的类型之和最大是多少?
注意到父亲的限制是没有用的,因为原题的条件保证了 \(\forall i,c_{u,i}>c_{f_u,i}\)。于是这个问题就是 Cardboard Box
了。
IOI 2023. Robot Contest
组合计数中的递推问题
无标号组合类的多重集运算
对应的生成函数是
进行一些推导:
做反演,可以得到
假如
可以通过上面的式子得到 \(\mathscr B\) 的数列。
\(\mathscr A\) 有两种组合意义:
- 字符集大小为 \(q\) 的字符串;
- 有限域上的首一多项式。
对应地,\(\mathscr B\) 也有两种组合意义:
- 字符串的 Lyndon 分解;
- 将多项式分解成若干不可约多项式之积。
微分算子
定义
对于 OGF,有 \(\partial x^n=nx^{n-1}\);对于 EGF,有 \(\partial \frac{x^n}{n!}=\frac{x^{n-1}}{n-1}\)。
组合意义是,OGF 相当于从一个大小为 \(n\) 的元素中选择一个取出来,将其变成一个大小为 \(n-1\) 的元素;对于 EGF,则是直接将其变成一个大小为 \(n-1\) 的元素。
微分的运算律:
- 可加性:\(\partial(A+B)=\partial A+\partial B\);
- 乘法:\(\partial(A\cdot B)=(\partial A)\cdot B+A\cdot (\partial B)\);
- 复合:\(\partial(A\circ B)=((\partial A)\circ B)\cdot \partial B\)。
多重集构造的递推式(有标号)
求导,得到
提取系数即可得到
例子:连通图
设 \(\mathscr G\) 是全体无向图的组合类,\(\mathscr C\) 是全体无向连通图的组合类,有 \(\mathscr G=\mathsf{MSet}\ \mathscr C\)。直接代入 \((22)\) 式即可得到一个递推。
假如对 \(G\) 求导,可以得到
通过 一些推导,可以得到
这也导出了 \(\mathscr C\) 的另一种递推式。
例子:\(n\) 王问题
问题:有多少个 \(n\) 阶排列 \(p\) 使得相邻两项之差的绝对值始终不是 \(1\)?设这个数列是 \(A_n\)。
考虑容斥,钦定排列中若干个 \(i\) 一定要满足 \(|p_i-p_{i+1}|=1\),这将 \(p\) 划分成了若干连续段,每个长度 \(L>1\) 的段带有 \((-1)^{L-1}\) 的容斥系数。
所以一段的带有容斥系数的生成函数就是
由于这些连续段是可以任意排列的,所以这里可以用复合来描述:
记 \(S(x)=\sum_{n\ge 0} n!x^n\),由于递推式 \(S_n=nS_{n-1}\),有
所以有
\(S'(F)\) 不好处理,考虑逆用求导的复合公式:
所以
这样就导出了 \(A_n\) 的递推式。
思考:2-正则图
记 \(\mathscr A\) 是 2-正则图的组合类,求其 EGF \(A(x)\)。
记 \(\mathscr C\) 是简单环的组合类,有 \(\mathscr A=\mathsf{MSet}\ \mathscr C\)。
于是
杂题选讲
IOI 2023. Longest Trip
IOI 2023. Soccer Stadium
CF1175G. Yet Another Partiton Problem
暴力自然是设 \(f_{i,j}\) 表示将 \(a_1,a_2,\dots,a_j\) 划分成 \(i\) 段的最小代价。由于 \(f_i\) 和 \(f_{i+1}\) 之间的转移形如
考虑 CDQ 分治来做这个东西。假如现在要算 \([l,m]\) 对 \((m,r]\) 的贡献,那么式子中的 \(\max\) 可以分取在 \([l,m]\) 和取在 \((m,r]\) 两类讨论,而这两类都是斜率优化。时间复杂度 \(O(nk\log n)\)。
关于斜率优化:
- 形如 \(f=\min_{(x,y)\in S}\{y-kx\}\) 的式子可以看作,最小化过 \((x,y)\) 且斜率为 \(k\) 的直线在 \(y\) 轴上的截距;
- 注意特判两个点横坐标相同的情况。