CF 随机做题

CF1884

2C

假设咱们钦定在 \(x\) 处取到最大值,则对于任意线段 \(i\),若 \(i\) 覆盖点 \(x\),则选中她会使得 \(\max a \leftarrow \max a + 1\)\(\min a \leftarrow \min a + y\)\(y \in \{0, 1\}\),则对答案产生 \(\ge 0\) 的贡献,故此时必然将所有线段 \(i\) 均选中。

接下来咱们考虑在确定最大值于 \(x\) 处取到后,此时被覆盖次数最少的点在何处取到:令 \(f_i\) 表示点 \(i\) 被多少个线段覆盖,则可知 \(f\)\(i\) 先单调不降再单调不升(证明:在 \(x\) 前,每经过一个左端点则 \(f_i \leftarrow f_{i - 1} + 1\);在 \(x\) 后,每经过一个右端点则 \(f_i \leftarrow f_{i - 1} - 1\)),故此时最小值必然于 \(1\)\(m\) 处取到。

覆盖 \(1\) 的线段个数 \(= \#\{i | l_i = 1\}\),覆盖 \(m\) 的线段个数 \(= \#\{i | r_i = m\}\),扫描线维护即可。

2D

直接求数对 \((i, j)\) 的个数不是很好求,考虑反过来,求不满足条件的数对 \((i, j)\) 的个数,此时存在 \(k\),使得 \(a_k | a_i\)\(a_k | a_j\),即 \(a_k | \gcd(a_i, a_j)\)

咱们令 \(f_x\) 表示满足 \(\gcd(a_i, a_j) = x\) 的数对 \((i, j)\) 个数,\(c_x\) 表示数列 \(\{a_i\}\)\(x\) 出现的个数,则有:

\[\binom{\sum_{p \in \mathrm{N}, px \le \max a} c_{px}}{2} = \sum_{p \in \mathrm{N}, px \le \max a} f_{px} \]

因此咱们有:

\[f_x = \binom{\sum_{p \in \mathrm{N}, px \le \max a} c_{px}}{2} - \sum_{p \in \mathrm{N}, p > 1, px \le \max a} f_{px} \]

咱们记集合 \(S\)\(a_k\) 的倍数集合,答案为 \(\binom{n}{2} - \sum_{i \in S} f_i\),单次转移 \(O(\frac{\max a}{x})\),总复杂度 \(O(\max a \log \max a)\)\(n \ge \max a\)

CF1886

2C

咱们假设钦定 \(s\)\(i\) 位保留,删除第 \(i + 1\) 位,假设存在一个 \(j < i + 1\),使得 \(c_j > c_{j + 1}\),则删除 \(j\) 比删除 \(i + 1\) 优,故必然在第一个 \(i\) 满足 \(s_i > s_{i + 1}\) 的位置删除,链表维护第 \(i\) 个点的前后继即可。

2D

考虑倒着做 \(s\) 的构造,对于 \(\texttt{>}\) 相当于移除 \(s\) 中的最大元素,\(\texttt{<}\) 相当于移除 \(s\) 中的最小元素,\(\texttt{?}\) 相当于移除 \(s\) 中非最大也非最小的数。对于 \(s_i\),其中共有 \(i + 1\) 个元素,故最终答案即为 \(\prod_{s_i = \texttt{?}} (i - 1)\)

2E

「CSP 2019 划分」的精神赓续!

形式化题意:给定序列 \(a\),要求用 \(m\) 个集合覆盖序列的元素,使得每个集合至少覆盖住一个元素,且这些集合两两无交,并且对于每个集合 \(S_i\),其所覆盖住的每个元素 \(a_k\) 都有:\(a_k \ge \frac{b_i}{|S_i|}\)

首先咱们对序列 \(a\) 做有序化处理,使得其单调不增,即始终有 \(a_i \ge a_{i + 1}\),咱们假设对于集合 \(S_i\),其覆盖住的最小元素为 \(a_{j_0}\),其覆盖住的所有元素为 \(\{a_{j_0}, a_{j_1}, \cdots, a_{j_{p - 1}}\}\),对于 \(a_{j_0 + q}, q \in [1, p - 1]\),若覆盖住它的集合为 \(S_r\),则将 \(a_{j_0 + q}\) 移入 \(S_i\),将 \(a_{j_q}\) 移入 \(S_r\),显然 \(a_{j_q} \ge a_{j_0 + q}\),则移动后 \(|S_i|\)\(|S_r|\) 均不变,显然 \(S_r\) 仍满足条件,又因为 \(a_{j_0 + q} \ge a_{j_0} \ge \frac{b_i}{|S_i|}\),故 \(S_i\) 亦满足条件,咱们立即得出推论:必然存在一个解,其每个集合均覆盖住一段区间。

接下来咱们注意到:假设集合 \(S'\) 是所有集合中所覆盖住的区间左端点最小的集合,若其左端点不为 \(1\),则将 \(1\)\(S'\) 左端点的元素全部并入 \(S'\),此时 \(|S'|\) 增大,故 \(\frac{b'}{|S'|}\) 减小,则此时 \(S'\) 仍满足条件,故咱们又得到一个推论:必然存在一个解,其最左端的区间(集合)的左端点为 \(1\)

咱们又注意到,上述的推论自然地带有数学归纳的特征,因为将最左端的区间所覆盖住的元素从原序列中移除后,就形成了一个新的序列,且移除的元素不对后续产生任何约束,则由数学归纳法立即得出:\(S_1 = [1, r_1], S_2 = [r_1 + 1, r_2], S_3 = [r_2 + 1, r_3], \cdots, S_t = [r_{t - 1} + 1, r_t]\),此时问题转化为:构造序列 \(\{r_1, r_2, \cdots, r_t\}\),其严格单调增,且 \(r_1 \ge 1, r_t \le n\),并满足条件:\(\forall i \in [1, t], a_{r_i} \ge \frac{b_i}{r_i - r_{i - 1}}\)\(r_0 = 0\))。

现在咱们可以记 \(f_{i, S} \in \{0, 1\}\) 表示已经处理了前 \(i\)\(a\) 的元素,目前已经完成对集合 \(S\) 中的所有集合的分配(均分配了一个 \([1, i]\) 的子区间),并且 \(i\) 作为其中一个集合的右端点时能否对 \(S\) 中的所有集合完成其对应的 \(r\) 的构造,很显然有转移:\(f_{i, S} \rightarrow f_{j, S \cup \{k\}}, k \notin S, a_{j} \ge \frac{b_k}{j - i}\)

但是这个东西非常蠢!咱们考虑经典值域定义域互换:咱们注意到,如果对于所有可行构造 \(\{r_1, r_2, \cdots, r_t\}\)\(r_1\) 的最小值为 \(r_1'\),则将任意一个可行构造中的 \(r_1\) 换成 \(r_1'\) 后构造仍可行。故咱们直接令 \(f_S\) 表示对 \(S\) 中的所有集合均分配完其对应的 \(r\),此时 \(S\) 中的所有集合所覆盖的元素形成的前缀长度的最小值,考虑 \(f_S\) 如何转移:令 \(R(i, j)\) 表示令 \(i\) 作为第 \(j\) 个集合所覆盖区间的左端点,其最小的右端点 \(r\),则有:

\[f_S = \min_{k \in S} R(f_{S - \{k\}} + 1, k) \]

有解当且仅当 \(f_U \le n\)\(U = [1, n]\)\(r\) 的构造也可以直接根据 \(f\) 的转移得出,同时 \(R\) 可以利用其在 \(j\) 确定时的不降性将复杂度均摊掉,\(O(nm + m2^m)\)

CF1875

2D

首先序列 \(a\) 怎么排列跟答案没有关系,直接令 \(a\) 单调不降!

咱们注意到:记 \(c_x\) 表示数 \(x\) 出现的个数,假设咱们第 \(i\) 次删除了元素 \(d_i\),若咱们在做完第 \(t\) 个操作后第一次删完了一个元素 \(x\),则我们将 \(\{d_1, d_2, \cdots, d_t\}\) 重排,使得前 \(c_x\)\(d\) 均为 \(x\),其他的 \(d\) 保持原序接在 \(c_x\) 后面,此时答案不增且对后续时刻状态无影响,故得到推论:必然存在一个最优解,其每次操作都会连续删除一个相同的数 \(x\) 直至其被删完。

同时注意到如果咱们当前序列 mex 为 \(m\),则不可能再删除 \(\ge m\) 的数(除非 \(m = 0\)),所以咱们记 \(f_i\) 表示当前序列 mex \(= i\) 的最小代价,则有:

\[f_i = \min_{j > i} (f_j + j (c_i - 1) + i) \]

\(x\) 为原序列的 mex,则 \(f_x = 0\),答案即为 \(f_0\),需要离散化一下。

CF1882

2C

注意到对于一个 \(a_i \ge 0\),若 \(2 \perp i\),则 \(\forall j \ge i, a_j \ge 0\)\(a_j\) 均能被计入答案,证明:

\(\qquad\) 可以做如下构造:设 \(j\) 为满足 \(j \ge i, a_j \ge 0, 2 \perp j\)\(\forall i \le k \le j, a_k \ge 0\) 均有 \(2 \perp k\) 的极大数,则选中 \(j\)\(a_j\) 被计入答案,此时满足 \(k > j, a_k > 0\)\(k\) 奇偶性翻转,则若 \(k\) 存在,\(j\) 新的极大值将 \(\ge k\),不断做此操作直至 \(k\) 不存在时,则有 \(\forall p \ge i, a_p \ge 0\) 均有 \(2 \perp p\),每次选中最大的 \(p\) 则不影响其他 \(a \ge 0\) 位置的奇偶性,故 \(\forall j \ge i, a_j \ge 0\)\(a_j\) 均能被计入答案。

因此咱们找到满足 \(a_i \ge 0, 2 \perp i\) 的最小的 \(i\),做如上构造,不影响 \(< i\) 部分的奇偶性,并且答案取到了 \(\ge i\) 部分的上界,现考虑 \(< i\) 的部分怎么做:假设咱们钦定 \(\forall p \le k < i\)\(a_k \ge 0\) 均被选取,则此时至少需要使得 \(a_p\) 不计入答案或者选中一个 \(q < p, 2 \perp q, a_q < 0\) 计入答案,则对于 \(< i\) 部分答案为 \(\sum_{p \le k < i, a_k \ge 0} a_k + \max\{-a_p, a_q\}\),枚举 \(p\) 并维护后缀和即可,\(O(\sum n)\)

2D

换根 dp EZEZEZ。

假设 \(a_i \oplus c = a_j \oplus c\),则 \(a_i \oplus c \oplus c = a_j\)\(a_i = a_j\),故欲使 \(x\) 的子树内点权 \(\oplus c\) 均相同,则点权必须全部相同,因此对于 \(x\) 的一个儿子 \(y\),必须使得 \(y\) 的子树内的点权均为 \(a_x\),即 \(a_i \leftarrow a_i \oplus (a_y \oplus a_x), a_i = a_y, i \in \mathrm{Subtree}_y\),因此对于每颗子树 \(x\),若其父亲为 \(f\),则必须令 \(x\) 子树内的所有点权均 \(\oplus (a_x \oplus a_f)\),故咱们可以令 \(f \rightarrow x\) 的边权赋为 \(a_x \oplus a_f\),令 \(w_x\) 表示 \(f \rightarrow x\) 这条边的权,则答案为 \(\sum_{i \in V} w_i s_i\),其中 \(s_i = |\mathrm{Subtree}_i|\)

咱们记 \(f_i\) 表示以 \(i\) 为根时的答案,若 \(j\)\(i\)\(1\) 为根情况下的父亲,则有:

\[f_i = f_j + w_i (n - 2s_i) \]

最后答案即为 \(f_1, f_2, \cdots, f_n\)

2E1

非常喵题目,使我的滨州发光旋转。

假设咱们有一个排列,其 \([l, r]\) 的值分别为 \(\{a_l, a_l + 1, \cdots, a_l + r - l\}\),则咱们可以先对 \(r + 1\) 做一次操作,此时这个区间的位置变为:\([n - r + l, n]\),接下来咱们找到当前排列中值为 \(a_l + r - l + 1\) 的元素位置,记这个位置为 \(p\),对 \(p\) 做操作,则现在该区间的位置为 \([n - r + l - p, n - p]\),且 \(a_{n - p + 1} = a_l + r - l + 1 = a_{n - p} + 1\),则该区间拓展为 \([l, r + 1]\),对称地可以拓展到 \([l - 1, r]\)。因此这样每做 \(2\) 此操作最少可以使区间拓展 \(1\) 长度,故最多 \(2n\) 次操作就能使得一个排列满足 \(p_i = i\)

接下来咱们考虑怎么通过上述构造来做原问题,假设两个排列长度分别为 \(n, m\),其操作序列分别为 \(N, M\),不妨设 \(|N| \le |M|\),分以下两种情况讨论:

  1. \(2 \mid (|M| - |N|)\):则可以在 \(N\) 末尾不断加入 \(1, n\) 使得 \(|N| = |M|\),此时 \(N\) 的操作效果不变。

  2. \(2 \perp (|M| - |N|)\):此时又分两种情况:

    1. \(2 \perp n\)\(2 \perp m\):不妨设 \(2 \perp n\),则在 \(N\) 后接 \(n\)\(1\),则必然有 \(2 \mid (|M| - |N|)\),转化为情况 1。

    2. \(2 \mid n\)\(2 \mid m\):此时无解,证明:

      对于一个长为 \(2 \mid n\) 的排列,咱们可以将其表示为:\(\mathrm{AcB}\),对 \(\mathrm{c}\) 操作后变为 \(\mathrm{BcA}\),假设 \(\mathrm{AcB}\)\(a\) 个逆序对,\(\mathrm{BcA}\)\(a'\) 个逆序对,\(\mathrm{A}\)\(\mathrm{B}\) 各有 \(a_1\)\(a_2\) 个逆序对,则:

      \[\begin{align*} a = & a_1 + a_2 + \sum_{x \in A} \sum_{y \in B} [x > y] + \sum_{x \in A} [x > c] + \sum_{x \in B} [x < c]\\ a' = & a_1 + a_2 + \sum_{x \in A} \sum_{y \in B} [x < y] + \sum_{x \in A} [x < c] + \sum_{x \in B} [x > c]\\ a + a' = & 2(a_1 + a_2) + \sum_{x \in A} \sum_{y \in B} [x \neq y] + \sum_{x \in A} [x \neq c] + \sum_{x \in B} [x \neq c]\\ = & 2(a_1 + a_2) + |A| |B| + |A| + |B|\\ \end{align*} \]

      又因为 \(|A| + |B| = n - 1\),则 \(|A| |B| + |A| + |B| = (|A| + 1)(|B| + 1) - 1\),又因为 \(|A| + 1 + |B| + 1 = |A| + |B| + 2 \equiv |A| + |B| (\mod 2)\),则 $ 2 \mid (|A| + 1)(|B| + 1)$,则 \(2 \perp (a + a')\),即每做一次操作,逆序对个数奇偶性翻转,做偶数次则不翻转,又因为最终状态逆序对为 \(0\),故有解的必要条件为 \(2 \mid (|N| - |M|)\),否则无论如何操作,两排列的操作次数奇偶性始终不同,即无解。

做完了。

CF1879

2E

神秘。

首先咱们知道:使得选手胜利的决策必然是每次都限制该点只能向父亲方向走,那么问题转化为了如何染色使得该点每轮只能向父亲方向走,即对于每个点,都能根据与其邻接的边中的每种颜色的边数来区分其走向父亲的边是什么颜色,且其向父亲的边的颜色与其他与其邻接的边的颜色均不同。

咱们令 \(f_x\) 表示 \(x\) 的父节点,\(c_x\) 表示 \(x\)\(f_x\) 这条边的颜色,\(S_x\)\(x\) 的子节点集合,\(d_{x, c}\) 表示与 \(x\) 邻接的所有边中颜色为 \(c\) 的边数,则 \(d_{x, c_x} = 1\) 为有解的必要条件。

\(H_x\) 表示与 \(x\) 邻接的所有边的颜色集合,若咱们可以建立一个映射 \(f : \{H_1, H_2, \cdots, H_n\} \rightarrow \cup_{i = 1}^n H_i\),使得 \(f(H_x)\)\(x \rightarrow f_x\) 这条边的颜色,则可以构造解。

首先咱们注意到一个色数 \(k = 3\) 的构造:令 \(f(\{1, 2\}) = 1, f(\{2, 3\}) = 2, f(\{1, 3\}) = 3\),对于每个点 \(x\),若 \(x \rightarrow f_x\) 的颜色为 \(1\),则令所有 \(y \in S_x, y \rightarrow x\) 的边颜色为 \(2\);若 \(x \rightarrow f_x\) 的颜色为 \(2\),则令所有 \(y \in S_x, y \rightarrow x\) 的边颜色为 \(3\);若 \(x \rightarrow f_x\) 的颜色为 \(3\),则令所有 \(y \in S_x, y \rightarrow x\) 的边颜色为 \(1\)

因此可知 \(k \in \{1, 2, 3\}\),先考虑 \(k = 1\) 的情况:此时树高 \(\le 1\),因为否则则与 \(d_{x, c_x} = 1\) 矛盾;接下来咱们考虑 \(k = 2\) 的情况:因为 \(k = 2\),故 \(|H_x| \le 2\),又因 \(d_{x, c_x} = 1\),因此对于所有 \(c_x\) 存在的 \(x\)\(\forall y_1, y_2 \in S_x, c_{y_1} = c_{y_2}\)(树根的 \(c_x\) 不存在,故不受该条件约束),此时咱们无法再构造映射 \(f\) 了,因为绝大多数 \(H_x = \{1, 2\}\),很容易构造 \(f\) 不为映射的反例(比如:一个高 \(\ge 3\) 的树),因此咱们只能考虑通过 \(d_{x, c}\) 来判断 \([c = c_x]\)。首先如果 \(|S_x| \ge 2\),那么 \(d_{x, c'} \ge 2 > 1 = d_{x, c_x}, c' \neq c_x\),此时一定能够确定 \([c = c_x]\) 的值;否则,若存在多个 \(x\) 满足 \(|S_x| = 1\),且她们的 \(c\) 不均相等,则必然无解,反之,则可以钦定所有满足 \(|S_x| = 1\)\(x\)\(c_x = p\),则可以有解,现在咱们只需要考虑什么情况下可以使得 \(|S_x| = 1\)\(c_x\) 均相等。不失一般性地,咱们令 \(p = 1\)(因为将整棵树所有边的颜色 \(1 \rightarrow 2\)\(2 \rightarrow 1\) 后构造仍然合法)。

若有点 \(x\) 满足 \(|S_x| = 1\),则其 \(c_x = 1\),因此 \(c_{f_x} = 2, c_{f_{f_x}} = 1, \cdots\),故若有 \(x\)\(y\) 满足 \(|S_x| = |S_y| = 1\)\(x \in \mathrm{Subtree}_y\),并且 \(x\)\(y\) 均不为树根。记 \(h_x\) 表示 \(x\) 的高度,则若有 \(2 \perp h_x - h_y\),则在满足 \(c_x = 1\) 的条件下必然有 \(c_y = 2 \neq 1\),故此时不存在 \(k = 2\) 的构造。反之,咱们钦定所有满足 \(|S_x| = 1\)\(c_x = 1\) 后必然可以构造一组解,构造方法为:先给定一个初始解,这个解只需要满足 \(k = 2\)\(d_{x, c_x} = 1\) 的条件,然后咱们逐步将这个解调整到一个合法解:假设 \(|S_x| = 1\) 且在当前解中 \(c_x \neq 1\),将 \(\mathrm{Subtree}_{f_x}\) 内的所有边的颜色均翻转(\(1 \rightarrow 2\)\(2 \rightarrow 1\)),并将 \(f_x\) 到树根的链上的所有边的颜色翻转,得到新的解仍然合法,并且满足了 \(c_x = 1\),不断调整至对所有 \(|S_x| = 1\)\(c_x\) 均为 \(1\) 即可,这样最终一定能调整到一组合法解而不会来回死循环,因为陷入死循环当且仅当存在两个 \(x_1, x_2\),使得 \(c_{x_1} = 1\)\(c_{x_2} = 1\) 矛盾,而这种情况已经被咱们排除了。

posted @ 2023-11-02 20:01  Neuro-Reimu  阅读(11)  评论(0编辑  收藏  举报