进考场先吃一块巧克力,坐等发题。
打开题面一看,有 O2,没有非传统题。
读完题的第一印象:
- T1 贪心;
- T2 顺着 DP 过去即可(DP 套 DP);
- T3 数据结构维护一下;
- T4 平面图最小割。
开场先写 T1,写着写着写成「在远端的飞机可以在任何时刻补到近端」,样例过不了,突然意识到自己写错题意;把 cnt 改成一个 set 就过了。
T2 仔细读了一下题,发现似乎不能用自动机做判定,在草稿纸上分类讨论了一下认为其可以区间 DP+前缀和优化。写完一个之后样例二答案比标准答案大,调了半天后意识到 ASB/AB 形式的转移不能随意取分界点,否则会重复计算;把这个改完之后就过了。
T3 首先发现其需要维持被删除的数的另一个出现位置连续,尝试分析能否贪心,分析一会没分析出结果,一看比赛时间差不多过半,于是写了一个看似 \(O(n^2)\) 的爆搜,在贪心正确时复杂度正确。过了大样例之后又造了若干 R 很多的数据,中途一不小心造了一个 \(\sum n\) 多一个 0 的数据,也只跑了一点几秒,于是非常确信自己的程序没有问题,决定去肝 T4,要是肝出来了再慢慢分析正确性。
T4 成功完成了前面几步转化,并通过一些技巧减少了分类讨论的数量。然而最后一步让所有关键点有出边,意识到交叉一定不优后,没有意识到可能出现包含的情况,直接只对着环上所有相邻的点对做最短路,两两配对,结果第二个样例比标准答案大。此时离考试结束有四五十分钟。又尝试让一个点有多个出边,结果比标准答案小;对着转化题意做可以发现这样做会允许一条边被割多次,这看起来不该比正确答案小,于是猜测是某处写挂了(而非结论假了)。然而实际原因是一条边被割多次会导致存在三个区域两两有公共边界,该情况不合法,从而答案比正确答案小。反复横跳了一会,并没有意识到问题所在。
还有 15 分钟时开始开虚拟机挨个编译运行,并没有发现什么问题。几分钟后又开始分析 T4,最后才模糊地意识到完全没有限制的最短路可能造成三个区域两两有公共边界,然而没有分析出来。
出考场之后看 U 群提到 T4 是区间 DP(或者不依赖性质的最大权匹配),想了一会发现自己漏掉了两条路径包含的情况。
拿到代码之后花 6 分钟改完 T4,感觉血亏。/kk