- 感觉最近智商好低, T 1 T1 T1 写的正解被自己送成了 10 10 10 分,然后一直推 T 2 T2 T2 根本没有检查 T 1 T1 T1 然后 T 3 T3 T3 的暴力也没有打,最后群上催着收卷草草交卷成功爆炸
- 在家里
t
e
s
t
test
test 也要讲究策略, 该打的暴力要打,该拍的题要拍
非常时期不能因为在家里考试就耍水偷懒!
题解:
-
T1:注意到如果确定一个中心点过后,我们可以通过双指针扫一遍来看有多少个孤立点,如果孤立点个数 ≤ k \le k ≤k 那么这个中心点是合法的
首先判掉 k ≥ n k\ge n k≥n 的情况(无穷多个),那么现在中心点至少是某两个点的中点
那么我们可以 N 2 N^2 N2 枚举 O ( N ) O(N) O(N) 判断
考虑一些中点可以直接 b a n ban ban 掉, 那就是左倾和右倾的中点
我们规定除去孤立点外横坐标最小的点为 ( x 0 , y 0 ) (x_0,y_0) (x0,y0),中间点为 ( x , y ) (x,y) (x,y),除去孤立点外横坐标最大的点是 ( x 1 , y 1 ) (x_1,y_1) (x1,y1),那么必须满足 x 0 x_0 x0 左边的点和 x 1 x_1 x1 右边的点个数 ≤ k \le k ≤k 个
于是只有 c h e c k check check k 2 k^2 k2 个中间点,复杂度 O ( k 2 n ) O(k^2n) O(k2n)
C o d e Code Code -
T2:考场居然在推容斥,其实这道题容斥十分不好看,我们可以直接计算合法的方案数
那么显然有的 d p dp dp: d p i , l , r dp_{i,l,r} dpi,l,r 表示到第 i i i 排, i i i 排保留的为 ( l , r ] (l,r] (l,r] 的点的概率,有转移
d p i , l , r = p l ∗ p m − r ∑ j < r , k > l d p i − 1 , j , k dp_{i,l,r}=p_l*p_{m-r}\sum_{j<r,k>l}dp_{i-1,j,k} dpi,l,r=pl∗pm−rj<r,k>l∑dpi−1,j,k
二维前缀和优化就可以得到 60 60 60 分,考虑继续优化,我们令
f i , r = ∑ l < r d p i , l , r f_{i,r}=\sum_{l<r} dp_{i,l,r} fi,r=∑l<rdpi,l,r, g i , l = ∑ l < r d p i , l , r g_{i,l}=\sum_{l<r}dp_{i,l,r} gi,l=∑l<rdpi,l,r
那么我们直接考虑 f , g f,g f,g 的转移,令 S f Sf Sf 为 f f f 的前缀和, S g Sg Sg 为 g g g 的后缀和,合法的转移是一个矩阵的右上角,那么我们可以写出
f i , r = p m − r ∗ ∑ l < r ( S f i − 1 , m − S f i − 1 , l − S g i − 1 , r ) ∗ p l f_{i,r}=p_{m-r}*\sum_{l<r}(Sf_{i-1,m}-Sf_{i-1,l}-Sg_{i-1,r})*p_{l} fi,r=pm−r∗l<r∑(Sfi−1,m−Sfi−1,l−Sgi−1,r)∗pl
那么需要维护 p p p 的前缀和, S f ∗ p Sf*p Sf∗p 的前缀和, g g g 同理讨论即可
复杂度 O ( k + m n ) O(k+mn) O(k+mn)
C o d e Code Code -
T3:首先最后的生成树边一定都是两个生成树上的边,那么我们对二者都求一遍最小生成树
考虑当 x x x 很小时,最后的生成树全部是第一棵树上的边,随着 x x x 的增大将会有一些替换
那么我们可以令当前生成树为第一棵树,然后将第二棵树上的边按从小到大加入,那么当 x x x 足够大时,它将替换当前树上的链上最大的第一棵树的边,我们可以求出这个 x x x 的下届
按下届排序,二分就可以知道最后选了哪些边,链上最大, l i n k , c u t link,cut link,cut 用 L C T LCT LCT 解决
复杂度 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))
C o d e Code Code