【省选模拟】20/02/11

题目 p d f pdf

  • 感觉最近智商好低, T 1 T1 写的正解被自己送成了 10 10 分,然后一直推 T 2 T2 根本没有检查 T 1 T1 然后 T 3 T3 的暴力也没有打,最后群上催着收卷草草交卷成功爆炸
  • 在家里 t e s t test 也要讲究策略, 该打的暴力要打,该拍的题要拍
    非常时期不能因为在家里考试就耍水偷懒!

题解:

  • T1:注意到如果确定一个中心点过后,我们可以通过双指针扫一遍来看有多少个孤立点,如果孤立点个数 k \le k 那么这个中心点是合法的
    首先判掉 k n k\ge n 的情况(无穷多个),那么现在中心点至少是某两个点的中点
    那么我们可以 N 2 N^2 枚举 O ( N ) O(N) 判断
    考虑一些中点可以直接 b a n ban 掉, 那就是左倾和右倾的中点
    我们规定除去孤立点外横坐标最小的点为 ( x 0 , y 0 ) (x_0,y_0) ,中间点为 ( x , y ) (x,y) ,除去孤立点外横坐标最大的点是 ( x 1 , y 1 ) (x_1,y_1) ,那么必须满足 x 0 x_0 左边的点和 x 1 x_1 右边的点个数 k \le k
    于是只有 c h e c k check k 2 k^2 个中间点,复杂度 O ( k 2 n ) O(k^2n)
    C o d e Code

  • T2:考场居然在推容斥,其实这道题容斥十分不好看,我们可以直接计算合法的方案数
    那么显然有的 d p dp d p i , l , r dp_{i,l,r} 表示到第 i i 排, i i 排保留的为 ( 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}
    二维前缀和优化就可以得到 60 60 分,考虑继续优化,我们令
    f i , r = l < r d p i , l , r f_{i,r}=\sum_{l<r} dp_{i,l,r} g i , l = l < r d p i , l , r g_{i,l}=\sum_{l<r}dp_{i,l,r}
    那么我们直接考虑 f , g f,g 的转移,令 S f Sf f f 的前缀和, S g Sg 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}
    那么需要维护 p p 的前缀和, S f p Sf*p 的前缀和, g g 同理讨论即可
    复杂度 O ( k + m n ) O(k+mn)
    C o d e Code

  • T3:首先最后的生成树边一定都是两个生成树上的边,那么我们对二者都求一遍最小生成树
    考虑当 x x 很小时,最后的生成树全部是第一棵树上的边,随着 x x 的增大将会有一些替换
    那么我们可以令当前生成树为第一棵树,然后将第二棵树上的边按从小到大加入,那么当 x x 足够大时,它将替换当前树上的链上最大的第一棵树的边,我们可以求出这个 x x 的下届
    按下届排序,二分就可以知道最后选了哪些边,链上最大, l i n k , c u t link,cut L C T LCT 解决
    复杂度 O ( n l o g ( n ) ) O(nlog(n))
    C o d e Code

发布了635 篇原创文章 · 获赞 98 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/sslz_fsy/article/details/104266403