2026.10.28 考试总结
考试总结
估:100 + 100 + 25 + 0
实:100 + 100 + 25 + 0 rk8
t2 卡了很久常,但其实并不需要,导致后面两道时间剩的不多了,而我又去想 t3 正解(一直在往 P1186 上套导致没想出来正解)导致没有时间做 t4 的 40pts 暴力,无法更近一步。
T1
直接 dp 即可。
T2
Beaver's Jumping Track (Hard Version)
先考虑朴素 dp,考虑 \(dp_{[l, r], x, y}\) 表示区间 \([l, r]\) 的平台前面空了 \(x\) 个格子后面空了 \(y\) 个格子的最小代价,由于选一个比不选不劣(选一个的代价也是 \(0\))所以不用考虑一个平台一次都跳不到的情况。考虑转移,跟着定义朴素转移是 \(O(x ^ 4)\),不难用前缀和之类的优化到 \(O(x ^ 3)\)。
现在考虑支持区间查和单点修,用线段树维护这个 dp 类似 ddp,不难发现可以做到 \(O(q \log n x ^ 3)\),但空间是 \(O(n x ^ 2)\) 的 long long 还有 \(2\) 的常数开不下。考虑对于一个线段树节点维护 \(B\) 个平台,类似线段树套分块,这样子时间复杂度变成 \(O(q(B + \log \lceil \frac n B \rceil) x ^ 3)\),空间为 \(O((B + \lceil \frac n B \rceil) x ^ 2)\)。不难发现在空间够的情况下 \(B\) 尽量小跑得快,实测 \(B = 6\) 就能过了。做完了。
T3
被薄纱了。
不难发现我们想让最短路不经过 \(k\),不妨让我们钦定的最短路的长度全部取 \(l\) 其他全部取 \(r\)。我们考虑算这个行不行,设 \(f_i\) 表示从 \(1\) 到 \(i\) 的路径上边权全取 \(l\)(即 \(1 \rightarrow i\) 是钦定的最短路的一段前缀),其中 \(1 \rightarrow i\) 的距离为 \(s_1\),\(1 \rightarrow k\) 的距离为 \(s_2\),\(f_i\) 表示最小的 \(s_1 - s_2\)。设 \(d_i\) 表示边权全为 \(r\) 时 \(i\) 到 \(k\) 的最短路,显然有 \(s_2 + d_i > s_1\),即 \(f_i < d_i\) 才是合法的,\(d_i\) 可以一边 dijkstra 预处理。
考虑转移这个东西,如果最后 \(f_n < d_n\) 那么就可以。对于转移,假设我们要从 \(f_i\) 转移到 \(f_j\) 中间边权是 \(l\),不难发现需要 \(f_i + l < d_j\),此时 \(f_j \gets \min(f_j, f_i + l)\)。不难发现 \(f_i\) 越小越好,那么可以 dijkstra 维护这个转移。做完了。
T4
咕咕咕。

浙公网安备 33010602011771号