Loading

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 A=\mathsf{MSet}\ \mathscr B=\prod_{\alpha \in \mathscr B} (\mathsf{Seq}\ \alpha). \]

对应的生成函数是

\[A(x)=\prod_{n\ge 1} (1-x^n)^{-[x^n]B(x)}. \]

进行一些推导:

\[\begin{aligned} A(x) &=\exp\left(\sum_{n\ge 1} -[x^n]B(x)\ln (1-x^n)\right)\\ &=\exp\left(\sum_{n\ge 1} [x^n]B(x)\sum_{k\ge 1} \frac{x^{nk}}{k}\right)\\ &=\exp\left(\sum_{k\ge 1} \frac{1}{k}\sum_{n\ge 1} [x^n]B(x)x^{nk}\right)\\ &=\exp\left(\sum_{k\ge 1} \frac{B(x^k)}{k}\right) \end{aligned} \]

做反演,可以得到

\[B(x)=\sum_{k\ge 1} \frac{\mu(k)}{k} \ln A(x^k). \]

假如

\[A=\frac{1}{1-qx}, \]

可以通过上面的式子得到 \(\mathscr B\) 的数列。

\(\mathscr A\) 有两种组合意义:

  1. 字符集大小为 \(q\) 的字符串;
  2. 有限域上的首一多项式。

对应地,\(\mathscr B\) 也有两种组合意义:

  1. 字符串的 Lyndon 分解;
  2. 将多项式分解成若干不可约多项式之积。

微分算子

定义

\[\partial \left(\sum_{n\ge 0} a_nx^n\right)=\sum_{n\ge 1} a_n\cdot nx^{n-1}. \]

对于 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 B=\mathsf{MSet}\ \mathscr A, \]

\[B=\exp A, \]

求导,得到

\[B'=B\cdot A', \]

提取系数即可得到

\[b_n=\sum_{k=1}^n \binom{n-1}{k-1} a_kb_{n-k}. \tag{22} \]

例子:连通图

\(\mathscr G\) 是全体无向图的组合类,\(\mathscr C\) 是全体无向连通图的组合类,有 \(\mathscr G=\mathsf{MSet}\ \mathscr C\)。直接代入 \((22)\) 式即可得到一个递推。

假如对 \(G\) 求导,可以得到

\[\begin{aligned} G'(x) &=\sum_{n\ge 0} 2^{\binom{n+1}{2}} \frac{x^n}{n!}\\ &=\sum_{n\ge 0} 2^{\binom{n}{2}} \frac{(2x)^n}{n!}\\ &=G(2x). \end{aligned} \]

通过 一些推导,可以得到

\[C''(x)=C'(x)\cdot (2C'(2x)-C'(x)). \]

这也导出了 \(\mathscr C\) 的另一种递推式。

例子:\(n\) 王问题

问题:有多少个 \(n\) 阶排列 \(p\) 使得相邻两项之差的绝对值始终不是 \(1\)?设这个数列是 \(A_n\)

考虑容斥,钦定排列中若干个 \(i\) 一定要满足 \(|p_i-p_{i+1}|=1\),这将 \(p\) 划分成了若干连续段,每个长度 \(L>1\) 的段带有 \((-1)^{L-1}\) 的容斥系数。

所以一段的带有容斥系数的生成函数就是

\[F(x)=x+2\sum_{i\ge 2} (-1)^{i-2}x^i=x\cdot \frac{1-x}{1+x}. \]

由于这些连续段是可以任意排列的,所以这里可以用复合来描述:

\[A(x)=\left(\sum_{n\ge 0} n!x^n\right)\circ F \]

\(S(x)=\sum_{n\ge 0} n!x^n\),由于递推式 \(S_n=nS_{n-1}\),有

\[\begin{aligned} S(x) &=1+\sum_{n\ge 1} (n-1)!\cdot nx^n\\ &=1+x\sum_{n\ge 1} (n-1)!\cdot nx^{n-1}\\ &=1+x\cdot (x\cdot S(x))'\\ &=1+xS(x)+x^2S'(x). \end{aligned} \]

所以有

\[A=1+FA+F^2S'(F). \]

\(S'(F)\) 不好处理,考虑逆用求导的复合公式:

\[(\partial A)\circ B=\frac{\partial (A\circ B)}{\partial B}, \]

所以

\[A=1+FA+\frac{F^2A'}{F'}. \]

这样就导出了 \(A_n\) 的递推式。

思考:2-正则图

\(\mathscr A\) 是 2-正则图的组合类,求其 EGF \(A(x)\)

\(\mathscr C\) 是简单环的组合类,有 \(\mathscr A=\mathsf{MSet}\ \mathscr C\)

\[\begin{aligned} C(x) &=\sum_{n\ge 3} \frac{(n-1)!}{2}\cdot \frac{x^n}{n!}\\ &=\frac{1}{2}\cdot \sum_{n\ge 3} \frac{x^n}{n}\\ &=\frac{1}{2}\left(-\ln(1-x)-x-\frac{x^2}{2}\right). \end{aligned} \]

于是

\[\begin{aligned} A(x) &=\exp C(x)\\ &=\exp\left(\frac{1}{2}(-\ln(1-x)-x-\frac{x^2}{2})\right)\\ &=\exp\left(-\ln\sqrt{1-x}-\frac{x}{2}-\frac{x^2}{4}\right)\\ &=\left(\sqrt{1-x}\right)^{-1}\exp\left(-\frac{x}{2}-\frac{x^2}{4}\right). \end{aligned} \]

杂题选讲

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}\) 之间的转移形如

\[F_i=\min_{0\le j<i} \{G_j+(i-j)\cdot \max_{j<k\le i} \{a_k\}\}, \]

考虑 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\) 轴上的截距;
  • 注意特判两个点横坐标相同的情况。

TopCoder 14379. RPSRobots

集训队互测 2018. 完美的集合

集训队互测 2018. 完美的队列

CF506E. Mr. Kitayuta’s Gift

随机化和近似算法选讲

IOI 2023. Overtaking

IOI 2023. beechtree

2020-2021 集训队作业. Storm

WC/CTS 2023. 比赛

posted @ 2024-03-04 21:25  Alan_Zhao_2007  阅读(84)  评论(0编辑  收藏  举报