初三选拔模拟赛题解

给个正常的题解以正视听 . 不过说好的普及难度呢?

如果有问题请指出 .

T2

注意到答案一定可以取到最小区间的长度 \(len\),一种方案是按 \(0\dots len-1\) 循环填 .

T3

大致有两种做法:

  • 维护每个手指的次数 \(c_i\) 和占用的键数 \(t_i\),按 \(\frac{c_i}{t_i+1}\) 排序放堆里每次取最优的拿出来 .
  • 二分答案 \(t\),每次判断 \(\frac{c_i}t\) 之和能否达到总键数 .

T4

排序后把 \(a_{2\dots n-1}\)\(a_1,a_n\) 中最远的那个连边,然后连 \(a_1-a_n\) 即可 .

正确性可以考虑 Boruvka 算法的流程,先连 \(a_{2\dots n}\) 就是这个结果,最后剩两个连通块肯定是 \(a_1,a_n\) 连 .

T5

\(dp_{l,r}\) 表示区间 \([l,r]\) 的答案,转移有以下几种:

  • 如果 \(s_l,s_r\) 是匹配的括号,则 \(dp_{l,r}\overset{\min}\gets dp_{l+1,r-1}\) .
  • 对左边或者右边加一个括号构成匹配,\(dp_{l,r}\overset{\min}\gets\min\{dp_{l+1,r},dp_{l,r-1}\}+1\) .
  • 拆成两部分的答案拼起来,\(dp_{l,r}\overset{\min}\gets\min\limits_k\{dp_{l,k}+dp_{k+1,r}\}\) .

具体就是按照合法括号序列的构成转移 . 时间复杂度 \(\Theta(n^3)\) .

T6

线段树维护历史版本和,可以看吉司机论文 .

写一个看到的最简单的做法,线段树维护向量 \([hsum\quad sum\quad1]^{\mathsf T}\) 表示历史和、和、1 . 对于一次区间加 \(v\) 可以表示为矩阵乘法:

\[\begin{bmatrix}hsum'\\sum'\\1\end{bmatrix}=\begin{bmatrix}1&1&v\\0&1&v\\0&0&1\end{bmatrix}\begin{bmatrix}hsum\\sum\\1\end{bmatrix} \]

可能需要卡常,我不知道 . 时间复杂度 \(O(n+q\log n)\) .

T7

考虑横着差分一次,那么就变成一个竖线加一个数,一条斜线减一个数 . 对每列每个对角线开一个树状数组分别维护即可 .

时间复杂度 \(\Theta(n^2+q\log n)\) .

upd. 把树状数组换成差分即可去掉 log .

APJ 之言可谓是切中了

红 - 绿 - 橙 + 蓝 .

posted @ 2024-01-21 20:41  Jijidawang  阅读(251)  评论(5编辑  收藏  举报
😅​