• 2019牛客暑期多校训练营(第二场)


    A. Eddy Walker

    solved by rdc 202min -1

    题意 一个点在长度为 (n) 的环上游走,输出第一次访问到所有点时在 (x) 上的概率。

    做法 考虑经典的线段上随游走问题,数轴上有 (x=0)(A) 点,与 (x=n)(B) 点,那么位置为 (i) 的点被 (B) 吸附的概率为 (frac{i}{n}),分两次考虑,先以 (m-1),(m+1) 为壁做随机游走,再以 (m-1 or m+1)(m) 为壁做随机游走。


    B. Eddy Walker 2

    solved by rdc 262min -1

    题意 一个点在数轴上,每次往前随机跳 1 到 (k) 步。求能到达 (x) 的概率 (p(x)),以及 (x) 趋于正无穷时 (p(x))

    做法

    • (x) 不为正无穷时,(p(x)) 可由线性递推得出,施展 BM。
    • 否则,注意到跳 (a) 步,移动距离的期望为 (frac{(k+1)a}{2}),因此 $${lim_{x o +infty}}p(x)=frac{2}{k+1}$$ (我觉得我在口胡)

    C. Go on Strike!


    D. Kth Minimum Clique

    solved by F0_0H 230min -6

    题意 给定一个带点权简单图,求点权和第(k)小的完全子图

    题解

    • 首先对n个点根据点权排序
    • 考虑对于任意一个完全子图,可以再扩充的点一定为该完全子图每个点邻接点的交集
    • 并且优先扩充点权更小的一定更优,所以可以选择按点权大小顺序扩充,这样还保证了不会重复
    • 然后就可以用优先队列维护更新,每次实现一个扩充,并新加这个完全子图,再往后推一推,搞一搞就行了
    • 维护临接点用bitset

    TLE by rdc 二分上界,DFS 回溯找团,然后解体,二分受到了不公正的对待。


    E. Maze

    upsolved by sdcgvhgj
    题意 n*m的格子,每次向下走或者左右走,不能回头,询问方案数,带修改。
    做法 线段树套矩阵乘即可


    F. Partition problem

    solved by rdc 150min -3

    题意(2n) 个人,现需划分成两个等大的集合,一个无序 pair, ((x,y)) 若,(x,y) 属于不同的集合,对答案的贡献为 (v_{xy}),求极大答案。

    做法

    • 进行折半枚举,划分成两个集合 (L,R)
    • 预处理 (L,R) 每个子集内部无序对权值和。(O(2^nn))
    • 预处理 (R) 中每个元素和 (L) 中每个子集权,无序对权值和 (O(2^nn^2))
    • 枚举 (L) 中,哪些人属于集合 A,哪些人属于集合 B,枚举 (R) 中哪些人属于集合 (A)(O(C(2n,n)*n))

    G. Polygons

    upsolved by sdcgvhgj
    题意 求n条直线把平面割成的若干多边形
    做法

    • (n^2)个交点,多边形最多有(n^2)
    • 相邻的两交点之间相互连两条边,
    • 从一个点开始每次沿顺时针夹角最小的一条边移动,并删除这条边,直到走回这个点,所经过的点形成一个多边形
    • 三分eps即可(笑)

    H. Second Large Rectangle

    solved by rdc 93min -2

    题意 给一个01矩阵,求次大全为1的子矩阵大小。

    做法

    • 求极大子矩阵,预处理每个位置向上能连续延伸多少个 1,枚举下界,单调栈带走,记录次大的答案。
    • 把最大子矩阵去掉一行,或者去掉一列,尝试更新答案。

    I. Inside A Rectangle


    J. Subarray

    solved by F0_0H 107min -3

    题意 长度为(1e9)((1, -1))序列,下标从(0)(1e9-1),已知有(n)个区间为(1),其他为(-1), 问存在多少个区间的和(>1)(保证(sum_{1leq ileq n}r[i]-l[i]+1leq 1e7)

    题解

    • 可能作为区间端点的点个数最多为(3e7)
    • (f[i])表示以第(i)个区间右端点为答案右端点的最大区间和
    • (g[i])表示以第(i)个区间左端点为答案左端点的最大区间和
    • (f[i] = max(0, f[i-1]-(l[i]-r[i-1]-1))+r[i]-l[i]+1)
    • (g[i] = max(0, g[i+1]-(l[i+1]-r[i]-1))+r[i]-l[i]+1)
    • 如果(f[i] + g[i+1] geq l[i+1] - r[i] - 1),说明答案的左右端点可以跨越([r[i]+1, l[i+1]-1]),那么把这些合并考虑
    • 搞完上面,问题就变成了给你一个长度不超过(3e7)((1,-1))序列,问有多少区间和大于1
    • 树状数组时间(O(n*logn)),稳(T)
    • 考虑优化:
    • 很好用的性质:每次查询与上次查询的差距等于1
    • 从左到右枚举左端点,统计右边比当前值大的个数
    • 加个标记,标记左移,稳

  • 相关阅读:
    240个jQuery插件
    MySQL的mysqldump工具导入导出数据库
    [js脚本实现]图片向上滚动并且有停顿的特效
    linux 下常用查看Apache状态语句
    小命令说明
    Linux下Tomcat的启动、关闭、杀死进程
    POJ 数学题目
    2013421 心灵感悟
    证书创建工具 (Makecert.exe)
    有的句子不长,却能鼓舞我们,成为我们坚持下去的动力
  • 原文地址:https://www.cnblogs.com/FST-stay-night/p/11218660.html
Copyright © 2020-2023  润新知