2025.7.19 模拟赛

T1

有两个长度均为 \(n\) 的非负整数序列 \(a,b\),值域为 \([0,2^m)\),其中 \(m\) 为奇数。有两人玩游戏,初始有一个数 \(x\),在第 \(i\) 轮,先手先选择是否将 \(x\) 异或上 \(a_i\),后手再选择是否将 \(x\) 异或上 \(b_i\)。先手的目标是令 \(\text{popcnt}(x)>\dfrac{m}{2}\),后手反之。两人均知道游戏全貌,问先手是否有必胜策略。
\(1 \le n \le 16\)\(1 \le m \le 63\)

神人题。

暴力搜索决策树复杂度是 \(O(4^n)\),但是你可以进行剪枝。若一个儿子是必败态则可以不用搜索另一个儿子。但是这样仍然无法通过,于是我们随!!机!!打!!乱!!!!两个儿子的搜索顺序,你发现你通过了。为什么呢?

若一个点是必胜态,它的期望分支数是 \(\dfrac{1}{2}+\dfrac{2}{2}=\dfrac{3}{2}\);否则这层和下一层的分支数是 \(2 \times \dfrac{3}{2}=3\),因为其两个儿子均为必胜态。

所以你的期望复杂度是 \(O\left(\max\left(\dfrac{3}{2},3^{\frac{1}{2}}\right)^{2n}\right)=O(3^n)\),可以通过。

T2

\(n\) 个有序数对 \((a_i,b_i)\),对于每个 \(1 \le k \le n\),求解下面的问题:

  • 从这 \(n\) 个数对中挑选 \(k\) 个,记为 \((a_{p_1},b_{p_1}) \sim (a_{p_k},b_{p_k})\),最小化 \(\max\limits_{i=1}^k \left(\sum\limits_{j=1}^i a_{p_j} + b_{p_i} \right)\)。注意 \(p\) 可以是乱序。
    \(1 \le n \le 2 \times 10^5\)

首先应当考虑选出数对的顺序有什么性质。使用邻项交换的手法,对于相邻的 \(i,j\)\(i\)\(j\) 前当且仅当 \(a_i+\max(b_i,a_j+b_j) \le a_j+\max(b_j,a_i+b_i)\),那么我们有 \(b_j \ge b_i\),即我们选出的序列 \(p\) 应当满足 \(b_{p_i} \ge b_{p_{i+1}}\)

现在我们有了顺序,对着这个进行 dp。正着 dp 有 \(f_{i,j,k}\) 表示考虑了前 \(i\) 个数对,选了 \(j\) 个,答案为 \(k\)\(\sum a_i\) 的最小值。但是这样要记的东西会特别多,不妨考虑在答案序列尾部拼上一个数对。将数对按照 \(b_i\) 升序排序,令 \(f_{i,j}\) 表示考虑了前 \(i\) 个数,选了 \(j\) 个的答案。那么有 \(f_{i,j}=\min(\max(f_{i-1,j-1},b_i)+a_i,f_{i-1,j})\)

这个 dp 看起来已经比较优美了,观察它有什么性质。首先由于 \(b_i\) 是递增的,那么若某个时刻 \(f_{i-1,j} \le b_i\),那么 \(f_{i,j} \sim f_{n,j}\) 的值都不会改变。这就意味着,\(k=j\) 的答案就是 \(f_{i-1,j}\)。我们把这部分扔掉,转移即 \(f_{i,j}=f_{i-1,j-1}+a_i\),此时的 \(f\) 是下凸的。于是使用一个堆维护差分数组即可。时间复杂度 \(O(n \log n)\)

T3

给定一个长度为 \(n\) 的序列 \(a\) 以及一个正整数 \(m\)。在位置 \(i\) 有一根竖直立在地面的高度为 \(a_i\) 的木棍,你可以操作至多 \(m\) 次,每次可以将一根木棍的长度减一,但必须保证每根木棍长度均 \(\ge 1\)。你需要最小化任意两个木棍顶点只允许经过木棍与地面的距离的最大值,距离即 \(a_i+a_j+|i-j|\)
\(1 \le T \le 10\)\(1 \le n \le 2 \times 10^5\)\(1 \le k \le 10^{15}\)

对距离最大值的一个经典转化是找到一个点,其到每个点距离均不超过 \(d\),那么任意两点距离均不超过 \(2d\)

二分答案 \(x\),若答案为偶数则记为 \(2k\),否则记为 \(2k+1\)。那么我们需要 check 能否找到一个点使得可以操作不超过 \(m\) 次满足其到所有点距离都不超过 \(\dfrac{x}{2}\)。下面分讨。

posted @ 2026-07-19 21:26  luqyou  阅读(9)  评论(0)    收藏  举报