2024.12.3 CF2042 VP 题解
CF2042A Greedy Monocarp
将 \(a\) 从大到小排序后,显然一定存在一种最优解,是选择 \(a\) 的一个最长前缀,满足其前缀和不超过 \(k\),增加 \(a_1\) 直到这个前缀和等于 \(k\),增加次数即为答案
因此直接模拟即可,时间复杂度 \(O(\sum n\log n)\),瓶颈在于排序
CF2042B Game with Colored Marbles
在两者都执行最优策略的情况下,一定是 \(A\) 先选一个出现 \(1\) 次的,\(B\) 再选一个出现一次的,重复直到出现一次的选完。这部分总分为 \(2\lceil\frac x2\rceil\),其中 \(x\) 为出现一次的数字数量。对于出现不止一次的,一定是两人分别选至少一次,总贡献为出现不止一次的数字数量
因此直接统计即可,时间复杂度 \(O(\sum n)\)
(不清楚为什么前两题数据范围这么小,一开始 \(B\) 想到正解了,但以为正解为 \(O(\sum n^2)\) 或 \(O(\sum n^2\log n)\) 的,耽误了大约半小时,现在还不知道 \(B\) \(O(\sum n^2)\) 怎么做)
CF2042C Competitive Fishing
若在 \(i\) 和 \(i+1\) 之间新增一个断点,会令 \(B\) 的分数减 \(A\) 的分数的值增加 \(i+1\sim n\) 中 \(1\) 的数量减 \(0\) 的数量
因此将 \(O(n)\) 个按贡献从大到小排序,贪心选择即可
时间复杂度 \(O(\sum n\log n)\)
CF2042D Recommendations
相当于对于每个区间,求出所有能覆盖其的区间的交与原区间的差的长度
显然交为一个线段,因此转化为对于每个区间,求出所有能覆盖其的区间中左端点的最大值和右端点的最小值
可以分别排序后用 set 计算
时间复杂度 \(O(\sum n\log n)\)
CF2042E Vertex Pairs
显然树的重心中一定有至少一个在被选出集合内
令重心为树的根(若有两个则新建一个根,令两重心为其儿子,并去掉两重心之间的边)
考虑先将所有节点插入,再编号从大到小尝试删除
若 \(x\) 和 \(y\) 的值相同,则 \(lca(x,y)\) 到根的链上所有点都不能删(因为根一定选,因此不能断开)
从大到小考虑所有能删的点,若删除它,则其所在子树内所有点都标记为已删除
若删除了一个点,要标记其对应点(值相同的另一个点)到根的链上所有点为不可删除
可以证明这一算法的正确性
在标记点不可删时,若遇到一个已经删除的点,则说明剩余部分已经标记,直接跳出即可,这样可以保证复杂度
总时间复杂度 \(O(n\log n)\)
代码 参考了 Kitty-Milk
CF2042F Two Subarrays
显然可以用 \(DDP\)
若向量从上到下依次为 \(0\),第一个没选完,第一个选完,第二个没选完,第二个选完,则注意到只有左下角的半个矩形有用,其余全为 \(-\infty\)。因此矩乘时忽略剩余部分,常数可以减少为原来的 \(\frac16\)

浙公网安备 33010602011771号