20261028 - div……3+2! 总结
前言
我要开心蠕动。

我就这么蠕动。
哦我怎么是严格 rk1,太好了!ctj 是正确的,我最喜欢 ctj 了!对不起呀对不起我今天所有题都是 ctj 过的,c 的是官解,大家应该也能看出来,快把我移出榜单!!
今天为什么还有封榜啊 /yun 不早说不早说。
A - In Search of Convenience
我是区,我怎么还遍历了一遍。事实上直接输出 \((x,y+r)\) 就行了,我是啥子。
B - Did Not Go to Print
用 stack 维护当前的打印机内存情况,然后开个桶暴力枚举这个过程,最后判一下哪些没被打印即可。
C - Unrequited Love
随便 map 一下,扫一遍就能做了。记得把奇偶性情况特判一下。
D - Precision Alignment
两发罚时都是因为二分上界设小了,我是区!
最小的最大显然考虑二分,二分可以达到的这个 \(\min\) 值 \(mid\)。
那么 check 的时候只需要处理每个三元组和提升到 \(\ge mid\) 所需的次数,加起来判断是否 \(\le k\) 即可。
因此问题转化为只需要知道对于一组 \((a,b,c)\) 如何用最小的次数升到 \(a'+b'+c' \ge mid\) 了。
首先如果 \(a+b+c\) 已经达到 \(mid\),次数为 \(0\)。
然后如果 \(a=b=c\),永远也动不了,特判掉。
否则,只要存在 \(a>b\) 或 \(a>c\) 或 \(b>c\),就一定可以通过 \(>\) 的那个二元组提升剩下一个值,因此次数为 \(mid-(a+b+c)\)。
如果无法直接提升就是 \(a \le b \le c\)。是否以为这样就动不了了?并非,可以尝试将 \(b\) 降低到 \(<a\),或者将 \(c\) 降低到 \(<b\),就转化为上一种情况。这个时候,除了基本次数 \(mid - (a+b+c)\) 以外,还额外有 \(2 \times \min(b-a+1,c-b+1)\) 的代价,因为你降下去了又得重新升回来。
那么就可以据此写 check 函数了。
https://www.luogu.com.cn/article/opzdyzhi <- 这个是我写的题解!
E - Repentance Is Already on the Way
非常简单的题,最开始想复杂了做的比较久,后面发现本质一种情况 /xk。
这个人的行走轨迹大概是这样:

图画的不好,将就看吧 /kel。
那么一定存在一个位置,也就是 \(\text{ed}\)(终点)所在的那一列(令一组 \(a_i\) 和 \(b_i\) 同处在第 \(i\) 列),可以将整个轨迹划分成图上蓝色和绿色两段。
我们枚举当前这一列 \(i\),考察维护一个前缀和一个后缀和处理蓝色和绿色的部分,算一下即可。
具体的,初值 \(s_1 = 0\) 和 \(t_n = 0\),转移分别是 \(s_i = s_{i-1} + val_{a_{i-1} \to b_{i-1}} + val_{b_{i-1} \to a_i}\),以及 \(t_i = t_{i+1} + val_{a_i \to b_{i+1}} + val_{a_{i+1} \to b_i}\)。结合图片更好理解。
答案就是 \(\max_{i=0}^{n} s_i + t_i + val_{a_n \to b_n}\),后面这个 \(val_{a_n \to b_n}\) 也可以在 \(t\) 里面处理上。
https://www.luogu.com.cn/article/iasffogl <- 题解呀。
F - Tea Blend
超级简单的 hash!!
首先完全平方数在拆质因数分解的时候,每个质因子的个数都是偶数。
我们对于一个数 \(x\),定义 \(f(x)\) 表示 \(x\) 质因数分解后,质因数幂次为奇数的质因数的乘积。
那么我们在判断 \(a_i \times \prod_{k=1}^{j} a_k\) 是否为完全平方数的时候,只需要判断 \(f(a_i)\) 是否等于 \(f(\prod_{k=1}^{j} a_k)\) 即可。
后者扫一遍做,前者可以预处理。具体你怎么维护这个 \(f\),可以随便 hash 一下,为了防止被卡我用了双哈希。
因为每个数不同的质因数数量非常少,所以这样做是不会 TLE 的。
https://www.luogu.com.cn/article/139g41cf 是我的题解嘟嘟。
G - Copper Squander
很简单的一眼题啊……这个都做不出来的建议退役哦(指指点点
我们把答案拆成好几个部分,并考虑分别求解。
-
拆除不影响连通性的边:因为拆除这些边只会带来收益且没有额外代价,我们尽可能拆除那些较大的边。
- 那么我们可以最开始跑一个最小生成树,用 Kruskal,如果过程中某条边没有被加入,就将其收益加进答案。
-
将所有连通块串起来:如果目前有 \(k\) 个连通块,则要先连 \(k-1\) 条基础边。
- 最开始最小生成树的时候不是维护了并查集嘛,直接根据这个并查集算出来有 \(k\) 个连通块,代价为 \((1+2+\dots+k) \times x\) 也就是 \(\frac{k(k+1)}{2} \times x\)。
-
换旧买新:做完上面的操作已经完成了题目要求,但某些边可能过贵,可以选择卖掉后重新买入以赚取一定差价。
- 因为前面已经有了 \(k-1\) 条基础边需要增加,所以后续第 \(i\) 条新边的代价为 \((k+i-1)x\)。
- 为了最优,我们肯定尽可能选取那些贵的边卖出再买入,因此可以把最小生成树中的边的边权从大到小排序。
- 此时代价升序而收益降序,因此一定存在某个位置,使得前面的边是正收益,后面的边是负收益。这里的收益表示为当前边的边权减去重新买入的价格。
- 上述位置可以通过二分找出,那么只需将前面正收益的边带来的收益全部加上即可。
然后就做完了。有任何难度吗?
https://www.luogu.com.cn/article/6jgtfbjx 题解喵喵。
H - Maximize One MEX
暴力枚举题,随便做都行。最难的在于发现 \(n \le 100\)(。
I - Frogs Jump
简单结论题,感觉是个结论都能过(。随便尝试一下最优设计就可以发现答案只可能是 \(0\) 或 \(1\),就是青蛙个数为 \(1\) 的列的个数模 \(2\) 的值。
J - Yet Another Black Cell Problem
随便二分,check 里面随便贪心。不知道为什么有人 dp?
很显然这个东西具有单调性,考虑二分这个 \(k\) 然后 check 它是否合法。
首先对于黑点 \(a_i\),如果 \(|a_i - a_{i-1}| \le k\) 或 \(|a_i - a_{i+1}| \le k\),就可以直接借助 \(a_{i-1}\) 或 \(a_{i+1}\) 这种本来就是黑点的点将自己染黑。
否则,如果它左右的黑点都距离自己太远,只能新开一个黑点(题目里可以任选至多 \(x\) 个白点转变为黑点),要求该黑点位于 \([a_i - k,a_i + k]\) 区间内。
得到一堆区间,我们计算出最少的黑点数,使得任何一个区间里都至少有一个黑点。
考虑怎么贪心做这个东西。很简单,因为区间长度固定,直接按照右端点(左端点也是一个意思)升序排序,然后扫一遍整个区间。如果上一个新黑点还包含在这个区间内,就直接借用一下,不开新的;否则,因为后续其他区间都比这个区间靠后,所以我们贪心选择该区间的右端点作为新黑点。统计个数并判断是否 \(\le x\) 即可。
https://www.luogu.com.cn/article/tmu5ftqf <- 发出题解!
K - Connecting the Conflicts
贪心构造,大概构造成一个菊花的形式就可以了。这个可以感性地证一下,总的来说是简单的,至于为什么没做出来我也不知道。
L - Memory Cell Interception
不想做,之后有空再说。
M - Tree Reduction Game
不想做,之后有空再说。
总结

我直接就一个区!
csp rp ++

浙公网安备 33010602011771号