2019牛客暑期多校训练营(第八场)
A All-one Matrices
单调栈
B Beauty Values
签到题
C CDMA
构造
D Distance
题意:给定一个长方体,有两种操作
1. 在某个点插入一个tag
2. 询问某个点到所有tag的最小欧几里得距离
分析:分八个方向,建八个三维树状数组,去掉绝对值符号,维护最大值
参考代码:code
E Explorer
题意:给定n 给点,m条无向边,每条边都有通过的容量限制 [ l i , r i ] [l_i,r_i] [li,ri],问初始容量为多少才能从1号节点走到n节点
分析:并查集的按秩合并。首先离散化,将线段变成点,建立权值线段树,将边加到线段树中去,最后进行dfs加并查集。
参考代码:code
F Flower Dance
题意:给定平面上的n个点,选取四个组成,其中三个点组成一个三角形,另外一个点在这个三角形中间,求有多少种方法
分析:首先我们枚举中间的节点,对其它的点进行极角排序,将 p i p_i pi, p i + π p_i+\pi pi+π范围的点的组合减去,注意可能会重复减去,例如 p i + π p_i+\pi pi+π 的点有多少个,那么
2 , 3 , 4 2,3,4 2,3,4是一种不合法的状态,它会在遍历 2 2 2的时候被减去,也会在遍历 3 3 3的时候被减去(假设3排序后在4的前面),所以我们就定下规则,只在遍历同一边的时候才减去,其他时间不减去,即在3的时候减去,在2的时候不减去
参考代码:code
G Gemstones
模拟
I Inner World
题意:给定n棵,只有一个节点的树,节点都标号为1,有M次操作,每次操作将区间 [ L , R ] [L,R] [L,R]的树上的 u u u 节点加上一个儿子节点 v v v,每一次插入的 v v v节点是唯一的,并且保证存在操作区间内的树存在 u u u
分析: 发现所有的树,如果补全了,树的形状的是相同的,只不过是树上缺少了一部分而已,于是我们可以建立一颗树,将所有的添加都都加上去求dfs序,我们想象现在有 n n n行长度为 m + 1 m+1 m+1的dfs序,它是个二维的,每次查询的是 L , R L,R L,R行, p r e d f s [ u ] , n x t d f s [ u ] predfs[u],nxtdfs[u] predfs[u],nxtdfs[u]的矩阵的和,我们发现求完dfs序,其实已经可以用 区间修改的主席树来做了,但是考虑到主席树的空间消耗太大,可以将询问拆开来做,走到节点前查询 L , R L,R L,R的和,走出后查询 L , R L,R L,R的和,二者做差就是子树的贡献
参考代码:code
J Just Jump
题意: 长度为 L + 1 L+1 L+1的数轴上共有 [ 1 , 2 , . . . L − 1 ] [1,2,...L-1] [1,2,...L−1], L − 1 L-1 L−1块石头,现在需要从0到L,每次至少走的距离是 d d d,在第 t i t_i ti次走过之后,第 p i p_i pi块石头将会沉没,不可踏入,问共有多少种方案
分析:
1. 用前缀和可以求出没有不能走的石块的方案
2. 需要减去经过第 ( t i , p i ) (t_i,p_i) (ti,pi) 点到达终点的方案 ,从 ( 0 , 0 ) − > ( t i , p i ) − > ( L ) (0,0)->(t_i,p_i)->(L) (0,0)−>(ti,pi)−>(L),后半截是 f [ L − p [ i ] ] f[L-p[i]] f[L−p[i]]
3. 需要计算的是第 t i t_i ti次迈步,到达 p i p_i pi的方案数,且不经过其它不能经过的点的数量
从 ( t i , p i ) (t_i,p_i) (ti,pi) 到 ( t j , p j ) (t_j,p_j) (tj,pj)的方案数是
C ( p i − p j − 1 − ( t j − t i ) ∗ ( d − 2 ) − ( t j − t i − 1 ) − 1 , t j − t i − 1 ) C(p_i-p_j-1-(t_j-t_i)*(d-2)-(t_j-t_i-1)-1,t_j-t_i-1) C(pi−pj−1−(tj−ti)∗(d−2)−(tj−ti−1)−1,tj−ti−1)