XN2025 集训记录 D6
今天西安也降温了 , 一晚上没睡好 , 做了能有三四个梦 . 梦到自己去神秘巨大建筑群集训 , 找不到同桌还没找明白房间 . . . 这都啥跟啥 .
但是梦到的场景还挺艺术的 , 而且阈限空间感没那么强 , 甚至可以说是感觉基本上都不是非欧空间 , 大概就是地面上是极大面积建筑相连 , 非常洁净 , 是全包围室内但是天花板非常高 . 有大量人工造景 , 都偏现代风格 , 而且非常洁净 . 照明是暖色 , 整体不算很明亮 , 但是感觉比较舒适 .
而功能性的房间全都通过比较窄 , 没有窗户 , 有包裹感的走廊以及电梯连接 , 整体为偏古典风格 , 很明亮很温暖的风格 .
唉回味一下还是太艺术了 .
一晚上大脑全用来渲染了 , 起床就头疼
水题场
但是因为晚上没睡好然后直冲 T3 导致 T1 T2 俩更水的东西摆了 . 最后写不完了 . 我的 AK 场啊呜呜呜

模拟赛184/300 还是感谢出题人照顾我的水平拿水题组的模拟赛 .
T1 题意
CF1469F
初始有一个根节点 , 以及 \(n\) 条链 , 每条链点数为 \(a_i\) . 初始每个点 \(tag_i=1\) , 可以进行若干次如下操作 :
- 选择两个点 \(u,v\) , 要求 \(tag_u=tag_v=1\) . 加边 \((u,v)\) 并把 \(tag_u\gets 1,tag_v\gets 1\)
任意操作若干次 , 最小化所有 \(tag=0\) 的点中 , 与 \(rt\) 距离第 \(k\) 大 , 或者在不能产生第 \(k\) 大的点时输出 inf
.
T1 题解
无解可以直接特判 .
通过简单手玩 , 发现这个里面我们不太关心具体连成的图的形态 , 而是关心当前所有点与 \(rt\) 的 \(dis\) .
考虑维护当前所有 \(tag=0\) 且与 \(rt\) 联通的点 , 并且尝试逐一把链加到连通块上 . 这个操作相当于在可用点集中选出一个 \(dis_u\) , 把它从集合中删除 , 然后在链上找一个位置 \(v\) , 把链上除 \(v\) 之外的点的 \(dis\) 计算出来加入集合 .
这里能观察出一些结论 :
-
链上选的位置 \(v\) 一定是链中点最优 .
考虑加入的点的 \(dis\) 相当于两条公差 \(d=1\) 首项 \(dis_u+2\) 的等差数列 , 那么肯定是平均分配点最优 .
-
每次一定用当前最小 \(dis_u\) 来更新最优 . 考虑删去 \(dis_u\) 后至少插入一个 \(dis_u+2\) .
- 如果答案 \(<dis_u+2\) , 那么当前其他任何操作都不可能产生新的 \(<dis_u+2\) 的数 , 因此操作前求第 \(k\) 大就是答案 .
- 否则 , 只有 \(<dis_u+2\) 的值域部分 , 每个位置的数可能变劣 , 其余部分全都最优 , 而 \(<dis_u +2\) 的部分已经不在答案考虑范围内 , 唯一作用就是更新其他的点 , 根据贪心 , 优先选 \(dis_u\) 最小的 .
-
一定是按 \(a_i\) 从大到小插入点集最优 .
考虑调整法 , 假设 \(a_i<a_j\) , 且 \(i\) 比 \(j\) 先插入 , 则插入时选择的 \(dis_u\) 必然有 \(dis_u(i)\le dis_u(j)\) 那么把 \(j\) 与 \(i\) 替换位置 , 原来由 \(i\) 插入的 \(a_i\) 个点在 \(j\) 插入时也会出现 , 而 \(j\) 多出的 \(a_i-a_j\) 个点在没有其他额外代价的情况下 , 用了更小的 \(dis_u(i)\) 来插入 , 必然不劣 .
因此只需从大到小插入 \(a_i\) , 然后每次插入后查询一个第 \(k\) 大即可 .
考场上脑子抽了 , 到这一步想着写个暴力得了上了个 treap 维护 . 后来一下想到这玩意直接在值域上 , 搞个动态开点的线段树不就完事了 , 当然没时间写了 .
代码实现也很简单 , 纯水题 .
T2 题意
CF1476F
有一排 \(n\) 个人 , 每个人有向左右的视野 \(L_i,R_i\) , 每个人可以在看 \([i-L_i,i)\) 区间和 \((i,i+R_i]\) 区间中二选一 , 要求判断能否实现 , 如果能 , 输出方案 .
T2 题解
首先考虑一下 dp , 设 \(f_{i,j,k}\) 表示填考虑到前 \(i\) 个人 , 前 \(i\) 个人中最靠前的没覆盖到的位置是 \(j\) , 向后多覆盖到了 \(k\) 能否实现 .
发现这个 dp 形式非常冗余 , 考虑后面的人 \(t\) 想要不上前面没覆盖的位置 \(i\) , 只能选向左 , 并且一直覆盖到 \(j\) , 这个过程中 , \([i+1,t-1]\) 的决策是没有意义的 , 它们完全可以全选向右 .
因此 , 我们只考虑前 \(i\) 个人能覆盖多长的前缀 \(f_i\) , 考虑第 \(i\) 人转移 :
-
向右
\[f_i=\left\{\begin{matrix} f_{i-1}& ,f_{i-1}<i\\\max(f_{i-1},i+R_i)& ,f_{i-1}\ge i \end{matrix}\right. \] -
向左
\[f_i\gets \max\limits _{k\in (j,i)} k+R_k (f_j\ge i) \]
因为 \(f_i\) 单调不降 , 所以后一个转移可以二分实现 \(O(\log n)\) 转移 .
这样就 \(O(n\log n)\) 解决了这道题 .
T3 题意
CF1067D
有若干组 \((a_i,b_i,p_i)\) , 每个组有激活/未激活两种状态 , 初始分数 \(score=0\) , 所有组状态都是未激活 , 执行 \(T\) 轮以下操作 :
- 选择一组 \((a_i,b_i,p_i)\)
- 有 \(p_i\) 的概率 , 可以增加分数 : 若当前组未激活 , \(score+=a_i\) , 若已激活 , \(score+=b_i\) . 然后可以任选一组激活.
- 其余 \(1-p_i\) 的概率 , 什么也不做 .
求所有可能策略中 , \(score\) 期望的最大值 .
保证对于任意 \(i\) , $ a_i\le b_i,p\in(0,1)$
T3 题解
首先考虑如果有一次机会来激活一个位置 , 一定是选一个 \(b_i p_i\) 最大 , 即单次期望最大的位置来激活 , 然后一直选 , 设 \(\max b_ip_i=W\) .
现在考虑的问题是一开始没有激活的时候选谁 , 这时会有一个矛盾在 , 就是 \(a_ip_i\) 较大的可以使第一次取值最大 , 而 \(p_i\) 较大则更可能进入取 \(W\) 的阶段 , 因此样例里第一次取和如果第一次不成功第二次继续取 , 所取的 \(i\) 不同 . 所以联想到 dp ( 同时这里已经有一个凸包的意思了 ) .
设 \(f_i\) 为还剩 \(i\) 轮时的最大期望 , 容易写出转移 :
这样就有了暴力分 .
考虑优化这个东西 , 这个形式感觉很像凸包 , 把每一组视作一条直线 \(g_j(x)=p_j x+a_jp_j\) . 考虑把转移式化成带这个函数的形式
如果建出凸包然后每部转移都二分一下 , 会有 $O(T\log n) $ 的解法 .
考虑让复杂度与 \(T\) 无关 , 通过感性理解 , 容易发现 \(iW-f_i\) 似乎是递增的 , 毕竟 \(Wi\) 是理想情况下的最优解 , 而 \(f_i\) 每向后转移一步 , 就意味着多空了一轮 . 考虑严谨证明下 : 设 $ R_i=iW-f_i$ , 则
而 \(f_i\) 的单轮收益显然不大于 \(W\) , 因此有单调性 .
这可以联想到二分凸包上的转折点 , 也就是通过二分 , 得到凸包上的每段线段分别对应哪些区间的转移 .
这里二分的自变量包含 \(f_i\) , 所以需要把 \(f_i\) 用当前直线算出来 , 考虑用矩阵快速幂优化这个过程 .
这样是 \(O(n\log^2n)\) 的.
考虑把二分换成倍增 , 复杂度就是 \(O(n\log n)\) 的 .
考场上觉得这道题比较可做就先上手 T3 了 , 没想到前两位其实比 T3 还可做 .
. . . 下午改完题就有点摆 , 感觉已经彻底没动能了 , 明天正好缓一天 , 去看兵马俑 . (牢秦始皇的定制等身手办).
今天太冷了 , 还是明天再洗澡罢 .
🧊 Go on then ↑ ICARUUUUUUUUUUS → take your ↓ turn → 🧊
🧊 You always fly right UUUUUUP ↑ until it burns → 🧊