贪心、构造、DP、交互 合集(Part 2)
Problem A. CF704B Ant Man
题意:
有 \(n\) 个元素,第 \(i\) 个元素有五个参数 \(x_i,a_i,b_i,c_i,d_i\)。
你需要求出一个 \(1 \sim n\) 的排列 \(p\),满足 \(p_1 = s, p_n = e\),同时最小化这个排列的权值。
一个排列的权值为 \(\sum_{i=1}^{n-1} f(p_i, p_{i+1})\),其中 \(f(i,j)\) 定义为:
- 若 \(i > j\),则 \(f(i,j) = x_i - x_j + c_i + b_j\)。
- 若 \(i < j\),则 \(f(i,j) = x_j - x_i + d_i + a_j\)。
\(2 \leq n \le 5 \times 10^3\),\(s \ne e\),\(1 \le x_1 < x_2 < \cdots < x_n \le 10^9\),\(1 \le a_i,b_i,c_i,d_i \le 10^9\)。
解法:
这一类问题都可以描述如下:
你要求一个排列 \(p_1,p_2,\cdots,p_n\),最小 / 最大化 \(\sum \limits_{i=1}^{n-1} f(p_i,p_{i+1})\),其中 \(f(i,j)=\begin{cases} f(i)+g(j) && i<j\\h(i)+r(j) && i>j\end{cases}\)。
考虑到 \(f\) 的值与参数关系有关,考虑钦定顺序进行连续段 DP,记 \(f_{i,j}\) 表示已经填入 \([1,i]\),目前形成了 \(j\) 个连续段的答案。转移都是容易的,不过细节是插入 \(s\) 和 \(e\) 时有些转移是不合法的需要注意。
Problem B. CF1835C Twin Clusters
题意:
给定 \(k\) 与一个长度为 \(2^{k+1}\) 的整数序列,每个数 \(a_i \in [0,4^k)\)。求序列的两个非空不交子区间,异或和相等或确定无解。
\(0 \leq k \leq 17\)。
解法:
性质很多,逐步挖掘。
首先,不交的限制绝大多数情况都没意义。如果找到两个相交子区间异或相等,当且仅当一个区间包含另一个且长度差为 \(1\) 时无法构造不交的区间。
其次,我们断言必然有解。考虑反证。根据上述结论,容易知道每种区间异或和出现次数不超过 \(2\) 次,否则有解。其次,考虑区间个数为 \(\dfrac{2^{k+1}(2^{k+1}+1)}{2} > \dfrac{2^{2k+2}}{2}=2^{2k+1}=2\times 4^k\),每种异或结果不超过 \(2\) 个,故至少有 \(4^k+1\) 个不同区间异或,与题意矛盾。
最后,根据生日悖论,每次随机一个区间并计算异或和,加入 map 维护即可。复杂度 \(O(2^{k+1}\operatorname{poly}(k))\)。
Problem C. CF865E Hex Dyslexia
题意:
给定一个十六进制数 \(x\),可能含有前导 \(0\)。找到最小的长度和输入的数相等的十六进制数 \(b\) 使得存在另一个个长度和这个数相等的十六进制数 \(a\) 满足 \(a-b=x\) 且 \(a,b\) 的各位数字可以通过重排相同。\(a,b\) 可以有前导 \(0\)。若无解请报告,否则输出最小的 \(b\)。
记 \(n\) 为 \(x\) 长度,保证 \(n \leq 14\),时限 \(3\) 秒。
解法:
首先考虑有解的必要条件。
由于 \(a,b\) 重排相等,所以必然模 \(15\) 同余。原因比较显然。
考虑 \(a-b=x\),所以 \(x \equiv 0 \pmod {15}\)。这是有解的必要条件。
考虑 \(a\) 与 \(b\) 各位数字相等,但是却有 \(b=a-x\),若记 \(s\) 为 \(x\) 各位数字和,则 \(\dfrac s {15}\) 为 \(a-b\) 退位次数,原因是每次退位会使得数位和减去 \(15\)。
考虑枚举哪些位退位,复杂度至多 \(O\left(\binom {n} {\frac{n}{2}}\right)\)。
枚举进位后,每个位置的 \(a_i-b_i\) 可以直接求出。不妨将 \(b\) 看作 \(a\) 的置换,画出置换环,每条边的边权是 \(a_i - a_{p_i}\)。我们需要在每个点上写上 \([0,15]\) 的点权,使得每条边左右两数差为边权,同时最小化 \(a_1,a_2,\cdots,a_n\) 的字典序。
事实上,我们可以发现每个置换环的最小点权必然都为 \(0\),否则将环上所有点权减去最小值即可。然后我们还可以发现,两个有相同数的环可以通过更改指出的边进行合并。于是我们得到结论,存在最优解使得存在唯一的置换环,大小为 \(n\)。
接下来是容易的,进行 DP,记 \(f_S\) 表示目前已经加入了 \(S\) 这些点的最小答案,转移是简单的,总复杂度 \(O\left(\binom {n} {\frac{n}{2}} n2^n\right)\),可以通过。

浙公网安备 33010602011771号