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

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


A. String

做法 比赛时预处理哪些子串是最小表示,然后 BFS 最短路。复杂度不是很合理,本地测试了下 300 组长度为 200 的 010101.... 串,严重 TLE,题目中数据范围的描述可能存在不严谨之处。


B. Irreducible Polynomial

题意 判断一个多项式能否分解成若干个实系多项式。

做法 实系数多项式因式分解定理。多项式的非是根一定是共轭负数。

  • 比赛时想了半天,发现这个东西不会做啊。
  • RDC: 我们先求出所有根,再把这些根划分成很多个集合。
  • F0_0H: 大胆猜结论,虽然猜的没一个对的。

C. Governing sand

做法 按高度分类,从小到大枚举最大高度,比当前枚举的高度 h 要高的,一定删,比它小的,如果删前 ? 小的。


E.Find the median

solved by F0_0H 194min -1

题意 每次插入\([l[i], r[i]]\),询问中位数

做法

  • 很奇怪,数据为什么要这么搞,很容易让人想歪或者认为这是个强制在线题
  • 离散化后权值线段树上二分即可,比赛时因为没考虑好边界条件,智障了很久...

F.Energy stones

upsolved

题意 吃能量

做法 比赛中对着一个假做法自闭了很久,一直坚信其优美性和正确性

正解:

  • 查询离线,依次计算每个石头对答案的贡献
  • \(set\)维护包含当前石头的区间的\(ti\)
  • 每次插入删除至多修改三个区间差,用树状数组维护即可
  • 这种套路上次是在维护树上联通块大小上

I. Chessboard

很精彩的一道题!

做法

  • \(A_i\) 为第 \(i\) 行全为 1,其它位置全为 0 的方阵。
  • \(B_j\) 为第 \(j\) 列全为 1,其它位置全为 0 的方阵。
  • 一个 \(k\)\(k\) 列,任取 \(k\) 个元素,每个元素不同行不同列的方阵,一定可以由 \(\{A_1,A_2,....,B_1,B_2.....\}\) 的生成的线性空间中。也就是 \(\sum_{i=1}^{k}a_iA_i+\sum_{j=1}^{k}b_jB_k\)
  • 于是有 \(\sum_{i=1}^{k}a_i+\sum_{j=1}^{k}b_j \leq n\)
  • 但很可惜,如上线性空间的基中只有 \(2k-1\) 个向量,因此表出方式不唯一。
  • 对于不同的表出方式,令 \(d=min_{i=1}^{k} a_i\) 做变换 \(a_i:=a_i-d\), \(b_i:=b_i+d\),于是我们识破了本质相同的矩阵的不同表出方式。
  • 对于一个确定的 \(k\),答案为 \(\sum_{i=1}^{k}a_i+\sum_{j=1}^{k}b_j \leq n(存在 a_i=0)\)
  • 枚举 \(k\),用 \(\sum_{i=1}^{k}a_i + \sum_{j=1}^{k}b_j\leq n, (a_i,b_j\geq0)\) 的解数,减去 \(\sum_{i=1}^{k}a_i + \sum_{j=1}^{k}b_j\leq n, (b_j\geq0, a_i\geq1)\) 的解数。即可,复杂度 \(O(n)\)

复盘

  • 比赛时第一眼的想法:任选 \(k\) 个元素,之和相等,等价于任意子矩阵对角之和相等。建立线性方程组,第一行第一列的是主元,其它是自由元。
  • 然后就没有然后了。
  • 把矩阵中的元素当成变量,不失为一种合理的想法,但只有这个想法,就是视野狭窄了。
  • 题解中的做法,把行和列当成了变量。
  • 从行和列的角度考虑一个矩阵,这是常见的思路。

posted @ 2019-08-08 17:36  FST_stay_night  阅读(278)  评论(0编辑  收藏  举报