11.25日校内模拟赛总结
时间安排
- \(8:00 - 8:25\) 开题, 首先把题目通读了一遍。 \(T1\) 需要线性做法,应该是枚举斜率啥的。但是不需要枚举一个不动点吗?这样复杂度变成 \(O(nm)\) 了?有点神秘。 T2 是最优性dp,\(50pts\) 一眼会了,但是正解却看不出来。T3应该是斜率优化dp。 T4 是 ds。
- \(8:25 - 9:10\) 想了一会儿T1,发现斜率的枚举上界是 \(\frac{m}{n - 1}\) 的,然后可以 \(O(n)\) 枚举不动点就可以做到 \(O(1)\) 求出在某条直线上的点数,这样复杂度是线性的。直接开写,发现意外的好写 \(10min\) 写完了。中间肚子疼去上了个厕所。
- \(9:10 - 9:40\) 想T2, 发现了交换两个数字只会影响 \(O(n)\) 个 前缀剩余状态,然后也想到了前缀和后缀两次转移合并。但是没有想清楚我的 \(dp\) 该咋实现。因为转移是将 \(max\) 取 \(min\),不懂为什么能不考虑初始值去转移。所以以为做不了。然后花 \(10min\) 写了 \(50pts\)。感觉性质不是很会就先跳了。
- \(9:40 - 10:30\) 做 \(T3\),发现 \(O(n^4)\) 是显然的,然后稍微推了一个性质就可以做到 \(O(n^3)\) 了。但是我的状态是 \(O(n^2)\) 的, 转移需要枚举一个位置,并且不能分开上下两行所以不是很能优化。中间还尝试去推别的性质,但是都没有什么结果。然后想部分分,发现特殊性质有 \(20pts\),并且决策只有 \(O(1)\) 个因此可以直接写一个李超树。但是应该不会很好写。于是先把 \(50pts\) 写了先跳过。
- \(10:30 - 10:50\) 看了看 \(T4\),发现有 \(30pts\) 是容易的。感觉我 \(T2, T3\) 没什么分就决定拐回来重新做 \(T2\)。
- \(10:50 - 11:40\) 回去想 \(T2\),发现交换前后答案相差不会超过 \(2\),想着要用上这个性质需要能够 \(O(n)\) 去判定一个答案是不是合法。然后如果我将前缀剩余数组中小于check的答案的位置保留,那么只需要起点和终点联通就行了。但是这个非常难写,而且我感觉自己不太会写可撤销并查集。并且常数太大也应该过不去。然后就放弃了。又回头想了想T3,一直在想能不能优化我的做法,也没有什么新的思路。
- \(11:30 - 12:10\) 回去把 \(T4\) 暴力写了。想写 \(T3\) 的性质分,但是只剩下 \(10min\) 感觉写不出来就也放弃了。
赛后总结
- \(T2\) 没有想到将转移看做网格图上的移动, \(dp\) 值就是一条路径上的最大值,然后维护前后缀合并的思路就非常显然了。但是感觉考场想的那个 check 的思路已经非常接近了。为啥格路计数这种套路就是记不住呢???!! 下次应该多关注dp转移的实际含义的。
- \(T3\) 的关键想法是把两步分开考虑,多记一维状态。然后转移就变成了正常的斜率优化模版了。不管写李超树还是维护凸包都可以。并且非常清晰。还是少了一步转化啊。
- \(T4\) 的操作分块感觉不是很容易想到,因为没咋写过。但是感觉线段树分治的 \(60pts\) 是很套路的啊。应该是考场上光想着做T2T3导致没有深入思考吧。
- \(T1\) 挂成 \(25pts\) 了,是因为没有考虑上下界。看了遇到这种题还是应该再考虑周全一些。
预期得分: 100 + 50 + 50 + 30 = 230
实际得分: 25 + 50 + 50 + 30 = 155

浙公网安备 33010602011771号