CF 1253 题解

CF 1253 题解

A Single Push

考虑令 \(d_i=b_i-a_i\), 那么合法当且仅当 \(d\) 在一个前缀和一个后缀都是 \(0\), 其余地方值一致并且非负.

B Silly Mistake

注意到能作一次划分的时候立即划分一定更优, 因为这样就不会因为潜在的一天两次进入办公室而得不到答案.

贪心的模拟即可.

C Sweets Eating

首先把 \(a\) 降序排列, 用手去玩前几个值, 注意找递推关系: (令 \(k = 2\))

\[\begin{align*} &f_1 = a_1 \\ &f_2 = a_2 + a_1\\ &f_3 = a_3 + a_2 + 2a_1 \\ &f_4 = a_4 + a_3 + 2a_2 + 2a_1 \\ &f_5 = a_5 + a_4 + 2a_3 + 2a_2 + 3a_1 \\ &\ldots \end{align*} \]

观察得 \(f_i=sum_i+f_{i-k}\), 递推即可.

D Harmonious Graph

考虑一个边 \(l\rightarrow r\), 那么意味着 \(l\)\(r\) 这个区间都联通. 维护这样的连通性只需要并查集, 顺便用并查集跳过已经合并的位置, 那么暴力做就是对的.

需要添加的边就是目前的连通块数减掉最终连通块数, 证明考虑每一条边合并两个连通块.

E Antenna Coverage

注意到 \(n\) 比较小, 那么考虑一个 \(O(nm)\) 的 dp, 设 \(f_i\) 表示用第 \(i\) 格之前的信标去覆盖前 \(i\) 个位置的最小代价, 枚举覆盖第 \(i\) 格所用的信标 \(j\), 计算刚好覆盖 \(i\) 时该信标所覆盖的左端点 \(l\), 然后转移 \(f_i\leftarrow cst+\min_{l\leq j<i}f_j\), 后半部分在单调栈上二分即可.

问题是最后面的信标可能在右侧覆盖范围超出了 \(m\), 但是注意到它一定不会超过 \(2m\), 那么计算到 \(2m\) 即可.

F Cheap Robot

这道题是很牛的. 首先考虑求出来每个点离它最近的充电站的距离 \(dis_i\), 以及该充电站编号 \(near_i\). 暴力做直接炸了, 但是考虑多源 dij 就可以了.

考虑列列式子, 对于一条边 \(u\rightarrow v : w\), 设经过 \(i\) 时电量为 \(c_i\), 答案为 \(x\), 由于任意充电桩到达它都需要 \(dis_i\) 代价, 而它到达任意充电桩都需要 \(dis_i\) 代价, 因此有:

\[dis_i \leq c_i\leq x-dis_i \]

我们不妨认为机器人从 \(u\) 走到了 \(v\), 那么:

\[dis_u\leq c_u \leq x-dis_u \\ dis_v\leq c_u-w \leq x - dis_v \]

那么不难发现:

\[x-dis_v\geq c_u - w \geq dis_u - w \]

移项, 得:

\[x \geq dis_u + dis_v + w \]

我们现在有答案的一个下界, 考虑现在有路径 \(P:u\rightarrow v\), 而现在令答案是 \(\max_{(u,v):w\in P}(dis_u + dis_v + w)\), 是否存在合法路径呢? 存在的, 设路径表示为 \(p_1\rightarrow p_2\rightarrow p_3\rightarrow \ldots\rightarrow p_{k-1}\rightarrow p_k\), 那么我有足够的电量从 \(p_1\) 走到 \(near_{p_2}\), 再从 \(near_{p_2}\) 走到 \(near_{p_3}\), 以此类推即可.

因此把每条边重新赋边权, 然后建立最小生成树, 倍增求链上最大值即可.

posted @ 2024-11-19 21:21  snowycat1234  阅读(41)  评论(0)    收藏  举报