CCPC 2024 Final 部分题解
注意
题解写得可能非常抽象。
「如果一个题解你看不懂,那是题解垃圾而不是你垃圾。」
比赛链接:UCup
B. Add One 3 / 加一 3
题意
有一个长为 的整数序列 ,一次操作可以将 加 ;多次(独立的)询问,每次给出 ,问至少进行多少次操作可以使得 是 的唯一的和最大的子段(考虑空子段)。。
题解
先判断掉一些边界情况,比如当前最大子段和为负之类的。
如果这个 往两边延伸,存在一个非负的后缀或者前缀,那么其一定不合法;否则只需要把每个数加到充分大一定有解。
(无论初始的还是最终的)最大字段不可能与 相交或者包含 (因为 往外延伸都是负的),只可能在 内部或外部。实际上所有最大子段之间也只能包含或相离。
先不考虑“唯一”的要求。设当前最大子段和为 、 区间和为 。 以外的最大子段不会被在 内的增加所影响。我们考察 内的数。要让 本身是最大子段, 的前缀和和后缀和都要大于等于 ,即所有的前缀和要在 范围内。我们只需要从前往后,每一处前缀和为负了就在这里加一、在 处把前缀和加到 即可,这中途不会出现超过 的情况,因为 是最大子段和;每次操作都让 处的前缀和加一、其从 变到了 。因此需要的操作数是 。
现在要求唯一:
- 如果 已经是唯一的最大子段了, 即可,否则至少要再额外(在 或者 ) 来超越其他最大子段。
- 如果 内有最大子段,则要在 、 处各多加 。
我们需要求 、、、、、 的最大子段和,后三个需要用线段树。
C. Iridescent Universe / 彩虹色的宇宙
题意
给一个图,初始每条边有一种颜色。你可以做不超过 次操作,每次选择一个点 ,把它的所有相邻边变成 。问是否可行,并构造方案。。
题解
类似拓扑排序。考虑倒着操作,如果一个点的邻居的所有边都是同色的,那么之前可以是任意颜色的。把这些边的颜色变成空,继续对所有邻居边都是同色的或者空的点做这个操作。如果无法继续进行操作,对比一下剩下的边和初始边的颜色即可。
E. Omniscient Artist / 全知艺术家
题意
给定平面上 个与坐标轴平行的矩形,求覆盖次数是 的面积。,。
题解
扫描线,需要维护 :区间加减 、查询所有 的倍数出现次数。
对序列分块,每块维护 和 之间的每个数的出现次数。查询暴力查询即可,因为 ,所以 是 级别。重构需要做到 (而不是 )。
F. Witnessing the Miracle / 见证奇迹
题意
数轴上 到 的某些整点位置有磁铁。每次可以选择一个磁铁操作,这个磁铁会消失,两边的磁铁会往外移动一格。你想进行恰好 次操作,并且使得最终磁铁仍然在 之间。给两个带 ? 的 01 串 和 ,求有多少种替换 ? 的方式可以使得 和 可能是合法的初始状态和最终状态。。
题解
考虑确定被拿走的磁铁的集合,此时没有被拿走的磁铁移动的方向和距离可以由它左侧被拿走的磁铁的数量确定。因此拿走磁铁的顺序没有影响。
DP, 表示,确定了 的前 位和 的前 位,且若 是一个被保留的磁铁,则它最终的位置为 。转移时考虑当前位是 0、保留的 1 还是不保留的 1。
G. + and × with a sugar / +, × 与糖
题意
给定一个正整数序列,插入 +、* 使得运算结果最大。。
题解
如果总乘积超过 ,把所有数(除了开头结尾的 )乘起来一定最大。
对于剩下的数字,至多只有 个数不等于 ,可以直接枚举或者 DP 这些数的划分方式。
H. Qingyu's Little Training Center / 小青鱼的训练中心
题意
在所有长度为 有 个 1 的 01 串中,选 个,使得每一位 1 个数的最大值尽量小。构造方案。
题解
答案的下界显然是 \left\ceil \frac{km}{n} \right\ceil。其可以递归构造达到:
- 先找 \left\ceil \frac{km}{n} \right\ceil 个第一位是
1的串,为此,我们递归 n-1, m-1, \left\ceil \frac{km}{n} \right\ceil,并在得到的串前面加上1。 - 然后递归 n-1, m, k - \left\ceil \frac{km}{n} \right\ceil,并在得到的串前面加上
0。 - 在把两个集合合并起来的时候,需要把后面 位各自做置换,以把
1个数多 1 的位尽量错开。
K. Grotesque Team Reconstruction / 怪诞组队法
题意
给一个图,划分成两部分,使得两部分都连通并且点数模 都余 ,问是否可行。。
题解
首先判断原图不连通的情况。如果连通,划分成两个连通块意味着在某个点双内部划分开。
建立圆方树,求出点双连通分量中,每个点在去掉这个点双之后的连通块大小(即圆方树上这个点对应的子树大小)模 的余数。
如果一个点双中有一个 ,那么把这个点单独切出来即可,剩下的仍然连通。
否则这个点双中只有 ,如果只有一个 ,那么这个点双不可行。否则至少有 个 。因为是点双,所以可以双极定向,一定能划分成两个连通的部分,并且其中一个部分只有两个 。
L. Yearning for Yonder / 对远方的向往
题意
交互题。给定一棵形态和边权都随机的树。你可以查询两个点的距离,用不超过 次询问复原这棵树。。
题解
选择一个根 ,查询每个点到根的距离,找出最远的 (也就是直径的一端),再查询每个点到它的距离。通过这两个值可以确定每个点挂在 到 的链上的哪一个点对应的子树上、并且知道每个点到这个子树的根的距离。对每个子树递归即可。