2025.4.10 CWOI 模拟赛题解
T1 天才俱乐部
唐题,但是因为没有特判挂了 \(\textcolor{red}{100}\) 分,想让出题人飞起来。
我们可以把取模换一种方式表达,\(x \bmod k = x - k \lfloor \frac{x}{k} \rfloor\),所以:
对 \(sum - s\) 分解因数,暴力判断就好了,记得判断 \(sum \lt s\) 和 \(\textcolor{red}{sum = s}\) 的情况,出题人在每一组数据都放了 \(sum = s\) 的情况导致挂完。
T2 实战教学
看见最大值最小,考虑二分。
先二分一个答案 \(x\),考虑怎么 check
。
我们先按照 \(a\) 从大到小排序,因为能够选择的 \(j \gt i\) 一定满足 \(b _ j \le x - a _ i\),所以 \(i\) 能够选择的一定比 \(i + 1\) 少,因此考虑 \(i\) 可以不用管后面的。
因为对 \(i\) 的限制是越来越宽松的,所以我们可以直接选择满足条件的 \(a _ j\) 最大的那个 \(j\),可以直接线段树维护。
时间复杂度 \(\Omicron(n \log ^ 2 n)\)。
T3 穿越银匙之门
爆黑了,原题是 AGC027F。
无根树不好做,考虑选择一个根。这样,需要被操作的点,在两棵树中的父亲一定不同,于是根据这个关系连边跑拓扑排序就好了。
但是这样是错的只有 40 分。你猜出题人为什么在一档部分分明确写了答案不等于 \(n\),那说明答案可以等于 \(n\)。
那差的那一次在哪呢?我们钦定了根节点,那根节点一定不会动,但是有可能根节点需要先动一次。那我们可以枚举第一次操作,然后再跑上面的。
时间复杂度:\(\Omicron(Tn ^ 3)\)。
代码这得贴一个,很不好写,Link。
T4 绳网委托
看到 HDoG 的 1.3K 的 pushup
就直接不想改了。