OI 回忆录

有一个夜晚我烧毁了所有的记忆,从此我的梦就透明了。有一个早晨我扔掉了所有的昨天,从此我的脚步就轻盈了。


Part 0 序言

看过很多人的退役记,明白自己终有一天要退役,只是没有想到这一天来得这么快。

现在是 12.03 ,距离 12.05 的联赛只剩下 2 天了。大考将近的时候,像我这样高不成低不就的凡人,虽然表面平静如水,紧张和莫名的激动是必然的。

Ysuperman 谈话:“紧张的话,不如把目光放长远一点,想想考试后会干什么,想想会到常规后会怎么样。”

想了想,没有奇迹出现的话,我考后第一件事就是写退役记了。周六考完,周日我多半不会有心情写,再之后又要学常规了,指不定就咕了。反正这几天做题也没什么大用处了,那就在把自己的 OI 生涯总结一下吧。

于是就有了这篇回忆录。


Part 1 初中

初二的某个周末,我来到了长沙市一中,上一堂信息学竞赛的体验课。

我来听这堂课,其实本来仅仅是好奇如何让电脑读入/输出数据。可惜老师没讲那么底层的东西。模模糊糊记得上课的老师杂讲了很多算法,其中印象最深的是一个最短路算法。算法的名字是 Dijkstra,由于原理是贪心,所以当时激起了我极大的兴趣,下课后就去找老师,尝试去证明贪心选择的正确性。老师在我证明的时候突然问我:

“你想加入信息学竞赛吗?”

我急于将自己的证明成果告诉老师,就敷衍了句好。当然,事后我也并没有反悔,现在我依旧不后悔。

上这堂课的老师正好就是 Ysuperman 。而在这堂课之后,我每个星期天都得来一中接受培训了。我的 OI 生涯或许就此开始了吧。

插句闲话,如果要准确时间的话,有个参考时间是我的洛谷账号注册时间: 2017-12-24 ,正好是 2017 年的平安夜呢​ 🌲 。​


Part 2 高一

虽然说接触 OI 是从初中开始的,但真正敢说是个 OIer 还是要到高一的寒假。

是的,在我高一上期的时候,作为一名高中竞赛生,我还不会网络流/平衡树/主席树/AAM/高斯消元...照这样下去,过完寒假我铁定退役。

不求能够在组内模拟赛中拔得头筹,我只希望自己能够跟紧大家的步伐,我只希望自己能再离组内的大佬们近一点,我只希望自己能有一个配得上 OIer 这个称号的实力。

幸好,我没有放弃这个寒假。从这个寒假开始,我开始写竞赛日记,总结自己每天学习的收获,第一次如此渴望自己变强。

最开始是字符串,从 KMP,Manacher 开始,什么 exKMP 啊, AAM 啊, SA 啊都来了 。

然后是数据结构,从树链剖分开始,什么 splay 啊,treap 啊,主席树啊,左偏树啊,点分治啊,CDQ 啊,整体二分啊, LCT 啊都来了。

接着学图论,从 Tarjan 开始,什么二分图啊,网络流啊,带花树啊,支配树啊都来了。

最后学数论,从 exgcd 开始,什么 (ex)CRT 啊, (ex)BSGS 啊,欧拉函数啊,Miller_Rabin 啊,Pollard_Rho 啊都来了。

有一说一,除了数论部分,其他的学习基本构建了我现在的 OI 知识体系。它们大大加深了我对于 OI 的理解。

高一上期的时候看到稍微难一点的知识都会直接放弃,想着等到高二再去学,蜷缩在自己学过的知识里混日子。可是,如果自己定义自己的能力只能学到 KMP ,那就永远也学不会 AAM ,永远也不会听说 SAM 和 PAM 啊。寒假的时候尝试去学习高级算法,才明白其实也没有那么难。学基础的算法是不难的,而且会带给人许多思路上的启发,会加深对 OI 的理解,这本就是每一个 OIer 都必须经历的洗礼啊。

如果能够重新学习竞赛,我必不会再以“难”为借口固步自封了,任何时候都不会,永远不会。

寒假于我的竞赛之路而言算是一个转折吧。无论是知识上还是态度上都有巨大的收获呢。寒假也可以说是我最痛并快乐着的吧,尽管我几乎每个凌晨都在啃博客/论文/算法书,但我的的确确能感觉到自己进步的速度。成就感是最好的动力源吧,它让我有信心去继续学习。

寒假还要感谢许多人,在我最困难的时期给予我帮助。没有 Daniel ,没有 Rain_morning ,没有 Anson ,我真不知道自己能不能掌握这么多东西,能不能撑过这个寒假。

寒假过后回来的学习,每天都挣扎在常规和竞赛之间。计算几何、分治分块、平面图... 讲课变多了,而且学习的东西也很核心。Boshi 和 YZH 精心准备了许多的资源。本来对于我而言是一次机遇的。

可惜我这个人没什么规划,时间管理又比较松散,常规竞赛一起来的时候往往顾此失彼。这段时间印象最深的是我那段时间习惯于两天晚自习做一道题,日记也是两天写一篇。如此低的效率,我不知道我究竟麻木成了什么样子才会如此颓废。纵向对比一下,在联赛前效率巅峰的一两个月里,一天晚自习至少是可以做两道题目的。

一两天的效率低是可以允许的,但是要清楚地意识到这个效率不正常,然后做出调整,绝不可以浑浑噩噩就过去了。整段的低效率的日子好似一把刀,在你日后忙碌时想起仍会隐隐作痛。

这段时间也不算完全没有收获吧。作为一个鶸,我找到了 Boshi 博客里的 dp 题,然后分专题地去训练 dp ,渴望能够进一步强化自己的 dp 。现在 dp 的大部分底子都是这段时间加上寒假前的时间打下来的吧。

6.21 参加了省选。Day1 两题暴力选手,Day2 三题暴力选手。爬了。

在忙忙碌碌地适应和调整中,高一过去了。强的人依旧一骑绝尘,菜的人依旧只能望尘莫及独自叹息。


Part 3 高二

信息学竞赛的高二是常规生的高三。暑假的时候就明白自己再不抓紧就等着退役了。

暑假整个机房都报了 zroi 的课。zroi 是以难著称的,还真是名副其实。

课程一开始就是计数。简单温习了组合恒等式后就开始了自然数幂求和啊,容斥原理啊,斯特林反演啊之类的,听得我迷迷糊糊的只懂了六七成。

本来以为这就是上课难度的极限了,结果两天后上来就是抽象代数, Burnside 啊,Polya 啊什么全来了。这次直接把我听懵了。课程反馈给 Ysuperman 写的是“基本没懂”。好像也是第一次给这样的反馈。

Ysuperman 回复我:“之前你们学习的时候,还在讲课时就能听个七八成,这不叫什么竞赛。真正的竞赛你上课是听不懂的,你要去适应。”

逼着自己在机房里抱着视频啃了两天群论。

学完数学又开始字符串了。这次学的字符串算法就比较 nb 了。学习了后缀树啊,SA 啊,SAM 啊,广义 SAM 啊什么的,还做了一堆习题。

学习 SAM 是真的痛苦,但是 SAM 的板子是真的好背,而且 SAM 的功能是真的香,之后做子串问题不是用 SAM 就是用 AAM 。

再往后就开始学习数论了,什么裴蜀定理啊,欧拉定理啊,原根啊,二次剩余啊之类的都来了。这些东西背后的定理现在已经忘了六七成了吧(悲,唯有一个 二次互反律 ,当时觉得这种屑定理不会有人拿来出题吧,结果例题就把我脸打肿了。现在这个律还记忆犹新。

zroi 培训完后恰好是 8.31 , Ysuperman 说给我们放半天假。我, Z 神,丹尼和西哥一起去五一广场玩一下午,在城市英雄里面打了几个小时电游,还在某赛车比赛上拿了 rk1 。有一说一,丹尼打电游是真的强,把把第一,这姿态,像极了他校内模拟赛把把 AK 。晚上西哥没地方去,就跑我家去睡觉了(捂脸

第一次小团建,想起来还是很温馨呢 ❤️ 。

之后的大团建都是在各种考试后。CSP-S 模拟赛六点半下考,出考场时天已经晕染了一层晚霞,校门口的店子也基本都打烊了。一伙人只能出发到马路对面的 McDonald 去吃晚饭,路上一边讨论考试题目的做法 ,一边互相膜拜 Fake 。

—— T2 可不可以 CDQ 分治套单调栈套树状数组做到两个 log 啊?

—— 怒切 T2 ,您太神了。但您的树状数组不是可以换成前缀和变成一个 log 嘛。

—— Orz 。xxx yyds 。

暑假之后的学习就是自主学习了。当时好像是受了省选的影响,学习了矩阵树定理。学完自以为知识学的差不多了,头脑一热,就中二地去尝试板刷 BZOJ 。

Ysuperman:“刷省选题积累套路是好的,但我还是建议你按照专题来学习。”

剩下的日子到圣诞节一直在学习概率期望。圣诞节的后一天恰是 NOI 。

Day1 还好,虽然也不怎么会,但是暴力思路挺清晰的。Day2 直接自闭,T1 是什么神仙构造,T2 是什么神仙题面,T3 是什么神仙弦图。考完出成绩后, Day1 没挂分,但 Day2 实在是考得太差。没准 Day2 某道题的暴力有点思路就过银牌线了。不管了不管了。

九月份又回到常规上课,培训进度到了博弈论。

游戏和的 SG 函数等于各个游戏的 Nim 和。

SG 定理 yyds ,第一次学这个定理就被它震撼了。如此简洁实用功能强大的定理,如此繁琐复杂抽象奇怪的证明,居然是一个有机体。

剩下的时间,各人准备自己的讲课内容。我负责的内容是 计算几何 。想到之前 Boshi 讲计算几何时我一道练习还没写,眼泪就刷刷地往下流。

自己做题,自己备课的时光很充实。跟别人讲的东西,不能太难,也不能太容易,而且关键是自己肯定要学会。考虑到我的水平在组里偏菜,每天只得自己研究论文,尝试看懂里面的证明,尝试将结论用自己的话表述在课件中,并设身处地地思考如何让听众的感受更好。计算几何里两个大头是旋转卡壳和半平面交,我的 pdf 里前者是翻译了一篇国外的论文来讲解,后者我蒯了一篇集训队的论文来讲解(雾。但愿大家能够在听了我的讲课后对计算几何的理解更加深入吧。

讲完计算几何,Ysuperman 看我任务不重,又把我放进了图论组。在图论组里我的分工是点分树和生成树相关。

之前对点分树就有一定的心理准备,真正面对时还是感觉瑟瑟发抖。是个题码量至少 3kb 以上,离谱的还有 4.5kb 。而且尽管码农,思维也是精妙无比。

说到这里,我突然想到了 紫荆花之恋 。是了,这个题我可以吹一辈子,就算退役个两三年,面对学弟学妹我大概也可以矜持地吹这道题吧 😉 ​ 。(开个玩笑

我怎么会说这道神题我做了整整一天呢 qwq

10.1 放了一天假,正巧赶上了模联城际会议。太幸运了 好开心。

10.2 学习了重构树。这东西很厉害,什么瓶颈路问题都可以直接秒了。学完大概有一种相见恨晚的感觉。

boshi 讲课,主题是数据结构。

兄弟会背叛你,女人会离开你,金钱会诱惑你,生活会刁难你,只有 ds 不会,不会就是不会,怎么学都不会

数据结构越学越神了,到最后看到题目推半天啥也不会,只能看完题解 sigh 一句:“这也能做?” 当时讲了很多题目,印象最深的是 CF710F String Set Queries 。通过二进制分组实现动态 AAM ,属实 nb 。

好了,接下来的日子由 scape 接管了。上来就是一手线性代数,很快啊。我全都没防出去嗷

不过线代在 OI 中的确很重要,比高数的应用更广泛。上一堂课,什么线性相关啊,伴随矩阵啊,代数余子矩阵啊都来了。

10.5 这是我 OI 生涯中值得纪念的一天。我终于入多项式全家桶的坑了。

说不清对多项式全家桶什么感情,在高一的时候每次看到都想着高二再碰,高二的时候每次看到都想着找时间正面刚;当 scape 课上完,我发现我听得还不错时,我竟然有些泪目,就像见到了一个多年的老友,完成了一个多年的夙愿一样。

实现多项式全家桶的过程是我整个 OI 生涯中最有成就感的时候,现在想起来依然热泪盈眶。或许这并不仅仅是对于一个算法的理解的激动吧,这份感情里包含着一个长久处于瓶颈期的人在感知到自己实力上升时的欣喜。

有一说一,学 OI 的大部分时候重要的是做题和总结,但学数学时做好课堂笔记更重要。上课听不懂,只能先记好,下课再慢慢看。

学完多项式自然是做生成函数题目。生成函数真的是人类智慧之光。

组合意义天地灭,代数推导保平安。

这段时间趁着学各种组合计数题的契机,把二项式反演给学了。二项式反演的应用范围是真的广。

刷了一堆组合推式子+多项式优化的题目后,培训的方向又转到了数据结构。

10.15 学习了 fhq_treap ,第一次实现了可持久化平衡树。

10.20 学习了圆方树,无向图连通性问题大杀器。

10.23 写了道树上点分治斜率优化 dp 题([NOI2014]购票)。写了整整一下午加一晚上,感觉头发又掉了不少。

本来培训的进度到这是学习图论的,然而图论前期的部分内容本来就是我讲的,于是对于我而言就是自习了。于是我那几天决定重学数论函数、莫比乌斯反演和杜教筛。独自学习数学的感觉很棒,就像一杯品质上乘的茶水,初尝时无味,过段时间心中便有清香。推式子的时候往往一两个小时什么代码也没有打,只是看着草稿纸上那一行行求和傻笑。切数学题真是 OI 中极有成就感的一件事呢。

学完数论再次进入图论。图论组要出两场 Educational Round 。神仙 xiaolilsq 一人出六题,txdy!!。

时光很快就到了 11 月份,我正式停止了知识点上的学习。每天就是考试考试考试......到现在对于考试也是有点麻木了。

再然后...再然后就是这个鶸要去面对人生中的最后一场联赛啦。我的竞赛生涯,开始于一场 NOIp ,即将结束于另一场 NOIp 。


Part 4 NOIp2020

以往的考试考前都是各种学,各种复习板子。直到这次联赛前,ZJY 在 U 盘里拷了个 counter-strike 1.6 。

单独一个人颓的时候很多,全组 8 个人开黑绝无仅有:

考前的最后一次团建(?

NOIp:60+84+0+35=179 再努努力吧。