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)