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

问题的转化

  1. 注意到标号为 x 的点,在每棵树都有确定的爸爸,建树,求 DFS 序。
  2. 注意到子树内的点 DFS 序是一段连续的区间。
  3. 二维偏序!

做法


J. Just Jump

题意 有 0~L,L+1 个石头,每次至少需要往前跳 d 个石头,第 t[i] 步不能到达 p[i] 求跳到 L 的方案数。

做法

  • HYNB!
  • 对限定条件,按照 \(p\) 排序。
  • 考虑容斥,\(f[i][j]\) 表示,选择 \(i\) 个限定条件违反掉,\(id\) 最大的为 \(j\) 的方案数。
  • 其实我们只关心 \(i\) 的奇偶性。
posted @ 2019-08-11 15:39  FST_stay_night  阅读(191)  评论(0编辑  收藏  举报