20260117 - 期末测验 总结

我为啥只是个 rk3 啊这么菜的吗。


A - ±1 Operation 2

哇哦第一道就是以往的 ABC D 题,难度上来了喔!

水题。显然所有小于 \(X\)\(a_i\) 就只会使用加法操作,所有大于 \(X\)\(a_i\) 就只会使用减法操作。考虑对 \(a_i\) 排序然后求前缀和,对于每个询问的 \(X\) 二分查找 \(a\) 序列中第一个大于 \(X\) 的位置 \(p\)。记 \(\sum_{i=1}^{p-1} a_i = S\)\(\sum_{i=p}^{n} a_i = T\),则这次询问的答案为 \(x(p-1)-S + T-xp\)

注意到与 \(X\) 相等的 \(a_i\) 不管是放在 \(S\) 还是放在 \(T\),哪一边都是可以的。

完了 T1 就是黄,怎么一个签子也没有啊?!

B - Fedor and New Game

求二进制有几位不同,考虑做异或 \(\oplus\) 运算后求 \(\text{popcount}\),看是否 \(\le k\) 即可。时间复杂度 \(O(nm)\)

C - Road Reduction

发现可以从节点 \(1\) 出发跑 Dijkstra,每次更新 \(dis\),只要遇到更优的就更新,这样最后跑出来的总是一棵树的形态,满足题目要求。对于每个除了 \(1\) 的点记录过来的边,之后输出即可。

注意到这是一个有赛后 Hack 的 ABC E 题,我们需要再 Dijkstra 里加一句剪枝:如果当前取出的堆顶 \(u\) 所对应在堆里存储的路径长度 \(d\) 与实际上 \(u\) 对应的路径长度 \(dis_u\) 不符,就直接跳过这一段。这样能节省时间,不然你会在 Hack 上 T,这便是我那一发罚时的由来 /kel

D - Air Conditioners

水题来着。所以 hhy 到底作弊没有。

题目说的很明白了,虽然题面很长(但大多都是在举例子讲废话喵!),简单地说就是找所有空调中,温度加上与该位置的距离的和的最小值。

考虑使用一些,类似模拟,或者说是 DP 的递推东西来解决这个玩意儿。定义 \(dp_i\) 表示单元格 \(i\) 的温度,最初有所有 \(dp_i = \infty\),但是 \(dp_{a_i} = t_i\)

接着考虑正着反着各推一遍,正着时让 \(dp_i = \min(dp_i , dp_{i-1} + 1)\),反着时同理,让 \(dp_i = \min(dp_i , dp_{i+1} + 1)\),因为空调温度不会变但距离总之要 \(+1\)

最后求出的 \(dp_i\) 就是单元格 \(i\) 的准确温度了,直接输出即可。

E - Fools and Roads

非常开心地拿到了首 A。

发现该题的图为一棵树,然后所谓傻瓜们走的是简单路径,即,我们只需要找到 \(\text{LCA}\) 然后树上差分维护最后跑一通 DFS 还原答案即可。

注意这里要处理的是边的经过次数不是点,并且需要存边的编号。

F - Palindromic Partitions

考虑贪心,从最前面和最后面开始找,从小到大枚举串的长度,一旦匹配上了就缩进,到了中间继续找。

发现是否匹配这一步骤可以使用 Hash 来判断,用双指针做,均摊 \(O(n)\) 没任何问题。然后你就过了。

G - Magic Ship

开心地签下了首 A 并成功场一道 *1900,开心喵。

发现当你知道现在能航行 \(D\) 天的时候是非常好做的,先利用前缀和与余数求出只靠风向在这 \(D\) 天后会跑到哪里去,然后将这个位置与正确的位置求曼哈顿距离,只要这个距离不超过 \(D\),该天数 \(D\) 便可行。

显然该问题存在单调性,如果航行 \(D\) 天到不了,那航行 \(D-1\) 天肯定更到不了;如果航行 \(D\) 天能到,那航行 \(D+1\) 天肯定也到得了。于是就可以考虑二分答案了,check 函数是好写的,上面已经讲完了,只需要在最开始预处理维护个前缀和即可 qwq。

H - Yet Another Yet Another Task

我如果切出来了,我就是 rk1 吧!

看似轻松地说出这句话但内心是绝望的。为什么啊啊啊啊啊啊啊 TAT

注意到卡牌价值的数据范围特别小,启发我们可以从这个值域方面下手。

posted @ 2026-01-19 20:38  嘎嘎喵  阅读(1)  评论(0)    收藏  举报