AGC035

A \((\texttt{Easy} \ 1 / 0)\)

发现 \(a_i = a_{i - 1} \oplus a_{i + 1} = (a_{i - 2} \oplus a_i) \oplus a_{i + 1}\),可以导出 \(a_i = a_{i + 3}\),并且 \(a_i \oplus a_{i + 1} \oplus a_{i + 2} = 0\),根据 \(n\) 是否为 \(3\) 的倍数分类讨论即可。

B \((\texttt{Easy} \ 1 / 0)\)

如果 \(2 \nmid m\) 显然无解。否则找出一棵生成树 dfs 一遍,如果当前点的出度为奇数则把它到父亲的边反向即可。

时间复杂度 \(\mathcal{O}(n)\)

C \((\texttt{Easy} \ 2 / 0)\)

\(n = 2^k\) 时显然无解,我们考虑其他情况的构造。

注意到 \(2n \oplus (2n + 1) \oplus 1 = 0\),所以可以考虑把 \(1\) 放在中间,连若干条 \(2i \rightarrow 2i + 1 \rightarrow 1 \rightarrow n + 2i \rightarrow n + 2i + 1\) 的边,再把 \(n + 1\) 随便连一下,就可以解决 \(n\) 为奇数的问题了。

对于 \(n\) 为偶数的情况,我们设 \(v = 2^r\)\(n\) 的二进制最高位,再连 \((n, n + v)\)\((2n, n - v + 1)\) 即可。

时间复杂度 \(\mathcal{O}(n)\)

D \((\texttt{Medium} \ 4 / 0)\)

唉,时间倒流这种东西还是想不到。

设最后一个删除的位置是 \(i\),考虑 \([1, i]\) 这个区间内的子问题。如果一个数最后到了最右边,即 \(i\) 的位置上,那么它对最终的答案就有两倍的贡献;如果到了左边,则有一倍的贡献。我们设 \(f(l, r, cl, cr)\) 表示考虑 \([l + 1, r - 1]\) 这个区间的子问题,其中的数到了左边有 \(cl\) 倍的贡献、到了右边有 \(cr\) 倍的贡献,其总贡献的最小值,转移显然,枚举最后被删除的位置即可。

状态至多有 \(\mathcal{O}(n^2 2^n)\) 种,分析可得只有 \(\mathcal{O}(n 2^n)\) 种,使用记忆化搜索即可通过。

事实上不加记忆化的搜索也能过,不知道为什么。

E \((\texttt{Easy} \ 4 / 4)\)

为什么平时做题就做得出这种数数题。

容易想到如下转化:建一张大小为 \(n\) 的图,从 \(i\)\(i - 2, i + k\) 连有向边,则一种方案合法当且仅当不存在一个环,使得环上的点全部被删去了。

对于 \(2 \mid k\) 的情况,发现如果不合法,则必然存在形如 \(x \to x - 2 \to x - 4 \to \cdots \to x - k \to x\) 的环上的点全部被删去。即,奇偶分开之后等价于一条链上不能选择连续 \(\frac{k}{2}\) 个点,可以通过简单 dp 实现。

对于 \(2 \nmid k\) 的情况,发现如果不合法,则必然存在形式如下的环:

  • 选取一个奇数 \(x\),这个环包括 \(x\) 及其下面的 \(u\) 个奇数、以及 \(x + k\) 及其上面的 \(v\) 个偶数,使得 \(u + v = k - 2\)

例如 \(k = 5\) 时,一种合法的环形如 \(3 \to 8 \to 6 \to 4 \to 2 \to 7 \to 5 \to 3\)。上面的这个条件等价于能够找到一个奇数 \(y\)(就是上面的 \(x + 2(u - 1)\)),使得存在一条从 \(y\) 开始的恰好经过一次 \(+k\) 的边的长度为 \(k + 2\) 的路径。

于是我们可以 dp,设 \(f_{i, x, y}\) 表示到 \(i\),从上一个奇数出发的最长路径长度为 \(x\)(未被删去即为 \(0\)),最后连续删去了 \(y\) 个偶数的方案数。

发现我们需要一起处理奇数 \(x\)\(x + k\),所以应该按照如下的顺序转移(不妨设 \(2 \nmid n\)):

\[2, 4, \cdots, k + 1, 1, k + 3, 3, \cdots, n, n - k, n - k + 2, \cdots, n - 1 \]

偶数情况类似。转移方程显然,不再赘述。

F \((\texttt{Medium} \ 6 / 0)\)

真的想不到。

考虑证明如下结论:不存在 \(i, j\) 使得 \(k_i = j - 1, l_j = i\) 的所有序列对 \((k, l)\) 与最终方案一一对应。

证明:

  • 对于一种方案,假设构成它的一种序列是 \((k_0, l_0)\),一直调整不合法的 \((i, j)\) 即可得到满足上述条件的 \((k, l)\)
  • 假设满足上述条件的两个序列对 \((k, l)\)\((k', l')\) 所生成的方案相同,考虑二者的 \(l\) 第一个不同的位置,记为 \(j\),且设 \(l_j < l'_j\),则缺的这一竖段只能用 \(k\) 去弥补,即 \(k_i \ge j \ (i \in (l_j, l'_j))\),所以 \(k'_i\) 都要比 \(j\) 小。而因为它们都满足条件,所以 \(k'_i < j - 1\),这与 \(j\) 的最小性矛盾。

于是简单容斥可以得到答案为

\[\sum\limits_{i = 0} ^ n (-1)^i i! \binom{n}{i} \binom{m}{i} (m + 1) ^ {n - i} (n + 1) ^ {m - i} \]

时间复杂度 \(\mathcal{O}(n)\)

posted @ 2022-10-26 16:09  Scintilla06  阅读(27)  评论(0编辑  收藏  举报