NOI 2019 游记
写在前面
一转眼已经学了两年 OI 了。
这大概是我的高中 OI 生涯中的最后一场考试。一想到有很大可能之后一年再也不会专门抽时间学 OI,心里就泛起苦涩,也涌出一股难舍之情。也没太多想说的,只希望自己能够全力以赴,能够给两年来的努力一个满意的答复。
由于写这篇游记时心情十分复杂,因此这篇游记相较于我的其他游记会显得简略一些。
7.15 (Day 0)
下午笔试,顺利拿到 100 分。
7.16 (Day 1)
准备按顺序开题。
看完 T1 十分天真地认为可以直接按点 dp,正准备写发现做法是假的。又思考了一会,发现按边 dp 再套个斜率优化就做完了,于是前后花了大概一小时写完这道题。写完后并没有反应过来数据范围改成 \(q \leq 10^3\) 有什么作用。
看完 T2 发现没什么想法,于是先跳,看 T3。
T3 看完题就会了暴力 \(O(n^4)\) dp,再想了一会发现可以三分强制两边都选的下标数量,然后写个上下界费用流。然而并不会算复杂度,写了一下发现能跑 \(n \leq 150\) 的数据,觉得还行。又想了一会,没什么太大的进展。
回过头去看 T2。对着样例自闭了十几分钟,又手玩了一会,会了 \(O\left(n^2 (\max B_i)^2\right)\) 的区间 dp,前缀和优化一下复杂度就降到了 \(O\left(n^2 (\max B_i)\right)\)。然而发现并跑不过测试点 \(8 \sim 10\),又自闭了。
于是今天预估分 100+35+40=175。
下午看分,T2 不知为何挂了 5 分,于是最终得分只有 170。T3 没有挂分十分感动,因为考完一直担心上下界费用流写挂。感觉我是全场 T3 得 40 分代码量最大的选手。
后来得知 T1 数据范围改成 \(q \leq 10^3\) 后成为普及组题目,有点不爽。又听说有人 T2 做法和我一样但得了 50 分,此时突然反应过来很多 dp 状态走不到,可以用 vector 压一下状态,这样就能过测试点 \(8 \sim 10\) 了,十分难过。
感觉今天很凉。
7.18 (Day 2)
开考前看到了今天 T2 的题目名称,极度不适。
准备按顺序开题。
看完 T1 会了线段树优化建图然后跑最短路的做法,然而发现内存只有 128 MB,直接优化建图点数边数爆炸,于是只能另想办法。冷静了一下发现用 Dijkstra 算法跑最短路时,堆中可以记边而不记点,这样就能保证到每个点的最短距离仅会被更新一次,于是只需要用一个数据结构查询某个二维区间内从未被查询到过的结点有哪些即可。想了一会发现直接用线段树套 set 就可以实现这一操作,空间复杂度为 \(O(n \log n)\),于是并未顾虑太多直接开写,写完一遍跑过了所有大样例,感觉很稳。
看完 T2 发现只会暴力做 dp,于是打完 40 分就跑路了。感觉是个神仙题。
看完 T3 发现白给 20 分。又手玩了一会,会了 \(M = N/2\) 的部分,结果写完发现做法是假的,似乎还要套个随机化,每次对集合做分裂时还要再设个什么大小参数之类的东西才行。瞎调了一会找到了 \(\frac{1}{4}\) 这个比较不错的参数,于是随便出了几组数据跑了一下,发现需要的次数比较稳定。我长松了一口气,感觉应该没什么大问题。然而这之后 T3 就再无太大进展,于是又自闭了。
于是今天估分 100+40+36=176。
下午看分,没有挂,心情稍微稳定了一下。
后来得知 T2 竟然可以打表找规律,有许多人 T2 拿到了满分,瞬间慌了,然而又只能充满了无奈,感觉我这种根本不会想打表的 sb 选手成功被这道题区分出来了。T3 没有搞到更高的分也是一个很大的遗憾。
感觉今天也很凉。
晚上出名次,算同分的话是 rank 76,果然凉了。
悲痛欲绝,但还是强忍伤感参加了 THU 的面试。
7.19
颁奖日。
上午拿了个 THU 的约。
下午颁奖,拿了个银牌。
后记
心情平复了之后,写下了下面这段文字。
两年学 OI 的时光转瞬即逝。虽然这段时光最终并没有以自己理想的结尾收场,但它还是让我见识到了许多美好、令人欣慰与感动的事物,让我在之前从未涉足的领域中收获到了新的友情,并学习到许多在其他方面广泛受用的知识与能力。这些固然是我在这两年中收获到的一笔宝贵财富,从某个角度上说,它们比我最终所期待的名次更值得我去珍重。俱往矣,是时候回归正常的学习生活中去了。希望在一年之后,我能够通过高考,站上新的、更高的平台,重拾曾经的这份热爱与期待。