Codeforces Round 968 (Div. 2)
A. Turtle and Good Strings
题意:确定是否存在一种方案使得 \(s = t_1 + t_2 + \cdots + t_m\),满足 \(m > 1\) 且任意 \(i < j\),\(t_i\) 的第一个字母不等于 \(t_j\) 的最后一个字母。
\(s_1\) 和 \(s_n\) 一定不属于一个子串,因此 \(s_1 = s_n\) 是条件非法的必要条件。
那么反之是否能构造一组解呢?这是显然的,取 \(t_1 = s[1], t_2 = s[2, n]\) 即可。
B. Turtle and Piggy Are Playing a Game 2
题意:Alice 和 Bob 进行博弈,Alice 先手。
每次 Alice 可以选一个 \(i\) 并删掉 \(i, i + 1\) 中较小的一个,Bob 可以选一个 \(i\) 并删掉 \(i, i + 1\) 中较大的一个。
Alice 想最大化 \(a_1\),Bob 想最小化 \(a_1\),求两人都在最优策略下的 \(a_1\)。
策略很明了了,Alice 每次删掉全局最小,Bob 每次删掉全局最大,删到最后只剩整个序列的中位数。
C. Turtle and Good Pairs
题意:\((i, j)\) 是好的当且仅当 \(i < j\) 且存在 \(k \in [i, j)\) ,满足 \(s_k \ne s_{k + 1}\) 且 \(s_i \ne s_k \lor s_{j} \ne s_{k + 1}\)。将 \(s\) 重新排序,最大化好的数对个数。
把字符串分为若干极长连续颜色段 \([l_i, r_i]\)(如 \(aaabbcc = [aaa][bb][cc]\))。
容易发现 \((i, j)\) 是好的的充要条件为 \(i, j\) 所在颜色段不相邻。
令 \(a_i = r_i - l_i + 1\),那么好的数对个数等于 \(\dfrac{n(n - 1)}{2} - \sum a_{i}a_{i + 1}\)。
目标转化为最小化 \(\sum a_i a_{i + 1}\)。
当字符集大小不为 \(1\) 时,可以证明 \(\sum a_i a_{i + 1} \ge n - 1\) 并且这个下界是可以达到的。
如果存在 \(a_k = 1\):
\[\sum_{i = 1}^{m - 1}a_ia_{i + 1} \ge \sum_{i = 1}^{k - 1}a_i + \sum_{i = k}^{m - 1}a_{i + 1} \ge n - a_k \]如果 \(\forall a_k \ge 2\),\(a_ia_{i + 1} \ge1 a_i + a_{i + 1}\):
\[\sum_{i = 1}^{m - 1}a_ia_{i + 1} \ge \sum_{i = 1}^{m - 1}a_i + \sum_{i = 2}^{m}a_{i} > n \]
我们让前面所有 \(a_i = 1\),最后一个连续段放多出来的相同字母(如 \(aaabbcc = ababacc\)),显然有 \(\sum a_ia_{i + 1} = n - 1\)。
时间复杂度 \(O(26n)\)。submission
D1. Turtle and a MEX Problem (Easy Version)
题意:给定 \(n\) 个序列 \([a_i]\),\(f(x)\) 定义为 \(x\) 经过若干次操作(可能不操作)达到的最大值。
一次操作定义为:选定一个序列 \([a_i]\),\(x \gets \text{mex}(x \cup [a_i])\)。在简单版中,一个序列可以被重复选择。
给定 \(m \le 10^9\),求 \(\sum_{x = 0}^{m} f(x)\)。
定义 \(u_i = \text{mex}[a_i],\ v_i = \text{mex}\big([a_i] \cup u_i\big)\)。
我们发现不管是什么 \(x\),不管对 \([a_i]\) 操作几次,能够达到且一定能达到的只有 \(v_i\) 和 \(u_i\)。
因此 \(f(x) = \max\big(x, \max v_i\big)\)。submission
D2. Turtle and a MEX Problem (Hard Version)
题意与 D1 相同,多了每个序列只能选一次的限制。
如果 \(x = u_i\),那么 \(x\) 能够走到 \(v_i\)。
不难想到 \(u_i\) 向 \(v_i\) 连边。
如果 \(x = u_i\),那么 \(x \to v_i\) 后是可以继续走 \(v_i\) 的出边的,因为一个序列只会产生一条边, \(v_i\) 的出边对应的序列不是 \(i\)。
定义 \(f_i\) 表示 \(i\) 能到达的最大点坐标,可以逆拓扑序完成。
- 一个 \(x\) 的答案至少是 \(f_i\)。
- 一个 \(x\) 的答案至少是 \(\max u_i\)。
- 如果 \(i\) 只有一条出边,只有 \(x = i\) 能够到达 \(f_i\)。
- 如果存在 \(i\) 有大于一条出边,那么对于任意 \(x\),我们可以先走另一条出边对应的序列来达到 \(i\),然后再走通向 \(f_i\) 的出边。
E1. Turtle and Inversions (Easy Version)
题意:给定 \(m\) 个限制 \([l_i, r_i]\),表示存在 \(k \in [l_i, r_i]\),记 \(a_i = \max_{j = l}^k p_j,\ b_i = \min_{j = k + 1}^{r}p_j\),使得 \(\max a_i < \min b_i\)。
求长度为 \(n \le 5\times10^3\) 的符合限制的排列的最大逆序对数。简单版保证限制互不相交。
把所有数分为两类:小数(\(0\))和大数(\(1\)),满足 \(\max \{0\} < \min \{1\}\)。
条件 \(i\) 被满足当且仅当 \([l, r]\) 内所有 \(0\) 都在 \(1\) 前面,且 \(0,1\) 都至少出现一次。
如果最后的排列有 \(x\) 个 \(0\),\(y\) 个 \(1\),贪心的使所有 \(0\) 从大到小排,\(1\) 从大到小排。
设有 \(z\) 个逆序对形如 \((1, 0)\),称之 \(10\) 对,那么最后的总逆序对数等于 \(\dfrac{x(x - 1)}{2} + \dfrac{y(y - 1)}{2} + z\)。
设 \(f(i, j)\) 表示填完前 \(i\) 个数,其中 \(j\) 个是 \(1\) 的最大 \(10\) 对数。
- 如果 \(i\) 是某个限制的右端点,枚举 \([l, r]\) 之间有多少个 \(1\)。
- 否则讨论 \(i\) 填 \(0\) 还是 \(1\)。
最后答案是 \(\max f(n, i) + \dfrac{i(i - 1)}{2} + \dfrac{(n - i)(n - i - 1)}{2}\)。
暴力转移看似是 \(n^2\) 的,但由于区间不相交,第一种转移也是均摊 \(O(n)\) 的。时间复杂度 \(O(n^2)\)。
E2. Turtle and Inversions (Hard Version)
题意:与 E1 相同,不保证限制互不相交。
先只考虑两个限制相交的情况:\([l_1, r_1][l_2, r_2]\),其中 \(l_1 \le l_2 \le r_1\)。
\([l_1, l_2)\) 必然全为 \(0\)。
类似的,令 \(r = \min(r_1, r_2),\ r^{\prime} = \max(r_1, r_2)\),则 \((r, r^{\prime}]\) 必然全为 \(1\)。
那么我们可以钦定这些位置,并新增限制 \([l_2, r]\)。
考虑拓展到一个限制集合 \(S\),满足 \(S\) 中限制之并是连续的(极大)。
我们发现,除了 \(S\) 中限制之交 \([\max l,\min r]\),其余位置都已经钦定。
经过这样的转换,所有限制保证不交,即 E1。submission
F. Turtle and Three Sequences
题意:给出三个长度为 \(n \le 3000\) 的序列 \(a, b, c\)。
选出一个长为 \(m \le 5\) 的序列 \(p\) 满足 \(1 \le p_1 < p_2 \cdots < p_m \le n\),满足 \(a_{p_i} \le a_{p_{i + 1}}\) 且所有 \(b_{p_{i}}\) 互不相同。
最大化 \(\sum c_{p_i}\) 的值,其中 \(a_i, b_i \le n\)。
如果 \(b\) 的值域很小,可以状压 dp:
\(f(i, S, j)\) 表示考虑了 \([1, i]\),被选中的 \(a\) 的最后一个数的值为 \(j\),被选中的 \(b\) 的值的集合为 \(S\) 的最大价值。
由于 \(b\) 中被选元素互不相同,不需要额外记录序列长度,集合大小 = 序列长度。
树状数组优化,单次可以做到 \(O(n\log n2^{\vert S\vert})\)。
考虑每次将 \(b\) 中元素向 \([1, m]\) 随机映射,即保证原来相等的还是相等,原来不等的可能相等。
一次就得到答案的概率等于 \(\dfrac{m!}{m^m}\)(可以理解为最优解中 \(m\) 种颜色映射过后依然互不相同的概率)。
跑 \(T = 300\) 轮,得不到最优解的概率只有 \(10^{-6}\) 级别,可以接受。

浙公网安备 33010602011771号