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]\) 即可。

submission

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 每次删掉全局最大,删到最后只剩整个序列的中位数。

submission

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\) 的出边。

submission

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)\)

submission

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}\) 级别,可以接受。

submission

posted @ 2024-08-26 21:50  Lu_xZ  阅读(375)  评论(0)    收藏  举报