2019牛客暑期多校训练营(第八场)
2019牛客暑期多校训练营(第八场)
A. All-one Matrices
solved by rdc 84min -2
做法
- 枚举下界 x,记录每个位置向上延伸 1 的高度,枚举列,单调栈预处理左右侧第一个比当前高度小的。
- 判断 x+1 行,左右界之间是否全为 1
问题。
C. CDMA
题意 构造矩阵,使得任意两行点积为 0
做法 样例具有很强的暗示性,我们可以用 k 阶矩阵,构造 k+1 阶矩阵。
D. Distance
题意 三维空间,插入点, 查询与某个点曼哈顿距离最小点。
比赛中做法
- 注意到
n*w*h
不太大。 - 一定存在两维,乘积小于等于 \(100000^{\frac{2}{3}}\)。
- 枚举这两维,bitset 维护另一维。(bitset 带查询后继功能,在这个问题上比 set 不知道高哪里去了)
- 然后就 TLE 了,因为不会开大小由变量决定的 bitset
- 然后 F0_0H 急中生智,把代码复制了 5 遍,就过了。928ms / 1000ms
- 比赛时的做法就是个憨憨。说不定哪天就 1500ms / 1000 ms 了
做法2.0
- 定期重构。
- 题目不是要插点嘛,我们弄一个好大的桶 A,一个容量为 E 的桶 B,装插入的点。
- 每插入一个点,先扔进桶 B,桶 B 满了呢?把桶 B 中所有的点倾倒入桶 A,这时建超级源点向桶 A 中的点连边权为 0 的边,跑 BFS,重新解析这个世界。
- 对于查询,如果与它距离最近的点在桶 A 中,那好办,查一查上次 BFS 跑出来的 dis 数组。如果在桶 B 中,也好办,桶 B 中至多 E 个元素,for 一下。
- E 取到 \(\sqrt{nhw}\) 就 win 了。
- 写了写,E 取 500 AC(850 ms),E 取 316 TLE,code
- 再改了一下,不要每次都拿着 A 桶里的所有点跑 BFS,保留上一次的 BFS 数组,把倾倒进去的点距离设为 0,跑 BFS 即可。155 ms code
E. Explorer
做法
- 线段树时间分治模板题
- 把动态维护二分图的代码改一改就能过
I. Inner World
upsolved
问题的转化
- 注意到标号为 x 的点,在每棵树都有确定的爸爸,建树,求 DFS 序。
- 注意到子树内的点 DFS 序是一段连续的区间。
- 二维偏序!
做法
J. Just Jump
题意 有 0~L,L+1 个石头,每次至少需要往前跳 d 个石头,第 t[i] 步不能到达 p[i] 求跳到 L 的方案数。
做法
- HYNB!
- 对限定条件,按照 \(p\) 排序。
- 考虑容斥,\(f[i][j]\) 表示,选择 \(i\) 个限定条件违反掉,\(id\) 最大的为 \(j\) 的方案数。
- 其实我们只关心 \(i\) 的奇偶性。