第二段旅途
chenxinyang2006 · · 个人记录
我的 NOI 游记总体写得比较消沉,不过我不觉得有人能在 UNR 被大爆一次、NOI 被小爆一次后仍然能非常乐观地讲述这些事。但虽然游记中表示出不知道接下来要怎么走,最终我还是决定还是认真把第二年打完:一来是我已经声称 “要再冲一年国家队” 占了 NOI 的一个金牌名额了,打完 NOI 就改口说摆了放弃无疑有点幽默;二来是感觉算法竞赛还是挺有趣,至少比预科课程好玩!有机会的话当然还是要做有趣的事情;另外的想法就是,别的可以做的事基本上未来还有机会去做,但要想在 OI 上再进一步,这是最后的机会了。
当然,我指的认真打完当然和高二下的模式保持一样:就是去读预科然后有空就训训 OI。高强度停课训,谁受得了啊!另一方面我也隐约觉得为有些事情付出太多,反而会越想做到越做不到。所以就保持一个正常的训练量差不多了,再加训反而可能会起负作用。
8 月应该就简单训了会 OI,下旬好像 HEZ 机房又开始安排训练了,于是就去了几次。多来了很多高一的学弟,感觉勉强认了个脸熟……
接下来的问题是下半学期预科的选课,那指导思想当然是少选点课。一开始是打算只选数分高代和一个 “据说很轻松” 的数算和一个基本啥都不用干的信概,把一般其他人会选的计概卖了。结果数分期末好像和英语学考冲突,于是改为把数分卖了,计概捡回来。
期间应该有一些人找我让我出模拟赛或者讲课之类的,但我觉得这学期不能再做太多乱七八糟的事了,于是全拒了。然后听说 shz 接了一堆。
开学之后就正常上课,感觉高代还是学到挺多,lww 讲课喜欢把各种线代其实隐式要用到的基础内容也都讲清楚,感觉这种讲课方式很对。不过缺点在于后半学期为了赶进度,讲课速度疯狂加速,有点魔怔。经常 2h 的课开头讲一个新东西的定义,然后中间讲一堆性质结论,一节课结束这个东西也讲完了,然后我基本啥也没听懂,只能回去看讲义。然后往年期末都不考计算题,于是我也没练,结果期末考一堆计算题我全算错了(甚至算错一个
然后是计概,前半部分讲 haskell,感觉讲课进度关于时间形如:先陡增一下,再走平很长一段时间,重复若干次。于是你在进度陡增的时间会什么都没搞懂,自闭了;在走平的时候发现这些东西都已经搞懂了,困死了。后半部分讲形式化证明之类的东西,感觉本质问题在于虽然他 claim 在一些限制下可以做形式化证明。但一方面限制太紧,感觉复杂一点的东西都证不出来,能证出来的东西证明方法也很麻烦,not practical。期末考证明要求必须写八股文,但我场上八股文没写明白,又被拿下了。
然后是数算,这个课我真懒得喷了。首先讲义中内容大多是 2008 年写的,快 20 年了。然后课程的本质难度就是靠莫名其妙反常识的定义让你看不懂题,从而做不出来。举个例子:一个字符串的 fail 序列的第一项应当为 -1,后面的第 splay 维护序列,但需要维护每个节点在原序列中的 index,要求 “不使用懒标记”,于是你应该写一个单次操作时间复杂度为串长的算法。
信概就是找各种方向的老师来给你介绍这个方向的内容,但我听了几节课后来就摆了。这门课也没有期末考,只要求交个听课笔记,我就随便写了一下。
最后高代、计概、数算都勉强混了个优秀。信概好像忘记问成绩了,但这是 PF 课,没道理 F 吧?
于是大家应该感受到预科课程有多么有趣了,现在是不是觉得算法竞赛也挺好了呢。总之,接下来还是谈谈算法竞赛吧。
这期间的训练目标当然还是备战 CTT/CTS,但传统弱校(?) HEZ 并没有 IOI 赛制的模拟赛(听说 nfls 联考有啊,很有实力),于是我决定认真打 集训队互测 。起码这个比赛确实 5h 三题有部分分,而且部分出题人应该还是会认真命题的。
说到互测,我投给互测的第一道题目其实在 23 年互测结束后不久就已经出出来了。当时命题的动机是 zak 出了一个很有趣的计树题是关于将一个经典树上问题转为计数的形式,于是我也想出一道这样的题。枚举了一会题意之后发现对 Purple Crayon 这题涉及的经典问题转为计数是可做的,而且做法还挺有趣,就决定明年互测投这个题。不过当时给的标算是 shz 验题时他从另一个角度得到的
我的另一道互测题正如命题报告中说的其实是 alpha 给的,感觉也还比较有趣。同时这道题让我也略有收获,虽然学到的系数为多项式的矩阵的牛迭求逆方法跑得未必更快就是了。
然后互测打得其实整体上还不错,R1/R7/R11/R13/R16/R17 未参赛。剩下的场只有 R15 被 fxt 倍杀了,很自闭;其他场应该最多也只比最高分低了 ~40 分,感觉其实还行。R1 我看过 fxt 一开始在 AGC055D 的题解还评论了一句于是被 DQ 了;R7 是撞了高代期中考;R11 我看 C 答案上界可以到 6.25e19 觉得出题人不是很尊重我,于是下班了;R13 是发现打了会不太来得及复习计概期中;R16/R17 分别是验题出题。
互测所有场中印象最深刻的当然是 R2,这场打得无比顺利。我一眼就看出了 B 的简单做法,1h 内就通过了;A 做了几步正确的转化之后猜了个错误的结论但顺利在 3h 通过了题;C 做了几步转化之后搬了 ARC146F 的做法,直接会了!写写写剩 30min 时通过了 85 分,最后要写任意模感觉一点意思也没有,算我 AK 下班了。发榜看见我 285 分大胜剩下所有人,甚至接近倍杀了很多 NOI 排名比我靠前的人时,真的有一种浴火重生般的激动。那天晚上应该在未名湖边逛了两圈,觉得只要 CTT/CTS 上有一场像这样大胜,剩下场全部苟住应该就赢了!毕竟我 CTT2023/CTS2024 拿了三场 rank2,我当时还是挺相信 CTT2024/CTS2025 也能复刻这样的大胜的,虽然事实上嘛……
互测之外的训练一方面是在各个 OJ 上随机做题,一方面是在各个 OJ 上随机打比赛。其实洛谷月赛应该也大胜过几场,还是增强了一些信心的。CF 在 2900 左右上上下下了几次后,Global round 27 打得很顺直接拿了 rk4,而且其实最后一发代码不交就 rk1 了(当然换个角度说最后一发代码不交之前交的过 pretest 的暴力 FST 了就爆炸了),上了 LGM,不过不是很激动因为好像其实没啥用。然后又打了一场掉下 IGM 了,又打了一场上回 LGM 了,其实也都无所谓!AT 方面的话,暑假里打了 AGC067 过了两个比较复杂的数数拿了个 rk5 直接也上到 3000 分了,虽然其实其实是利用了收敛的机制,但算我赢了。之后几场 AGC unrated register 打得都中规中矩,30~60 名的样子。
然后在机房训练应该受到了 wwc 和钱哥的一些指导,虽然我也一下子说不上来指导了点什么,总之感谢一下。
然后不知不觉就 CTT 了,我本来并不认为我会在这场比赛前太过紧张,但事实是我在 day1 前一晚严重失眠,直到凌晨两点才昏沉入睡。这种感觉和 Qiuly 老师曾在 CTT2023 描述过的 别无二致,我躺在床上时也曾想起过 Qiuly 老师的这篇游记,并思考这是否是一种轮回,这就是太过想赢的后果。
CTT day1 我醒来时感到精神有些疲惫,不过好处是困意完全盖过了紧张。进场之后左边是 LHF,感觉还是很有实力。看三个题,A 看上去就不是多项式复杂度的,但
试着做了做 A 立刻发现了
这个时候可能是开始做题进入状态了,困意倒逐渐消退了,感觉状态至少不算太差。B 做了做很快发现了答案实际上在求什么,然后就单次询问
感觉人有点麻,freopen,代码只读到
读对了题意之后仔细想想,发现我的
此时开始上真功夫卡了,加了一堆优化内存连续性和 18 次一取模之类的操作之后终于冲过了
最后 lhx 的 260,但因为 C 就他一个人
听讲题,A 的第二个包说是给 lhx 讲了他的做法,感觉也很外星人。
因为 CTT day1 前一晚失眠,我和李老师说了后他给了我褪黑素。然后我晚上吃了之后又失眠了,感觉可能药效不够强,最后又凌晨两点才睡着。
连续两天只睡了 4h,进场前当然比 day1 前更加疲惫,但比赛还是要打的。进场之后右边是 fxt,很有实力!看三个题,A 这个题意我好像研究过应该是取出度最大的点就一定距离
试着做一做 A,但完全想不出任何有道理的做法,只想到了几个乱搞。到 20min 决定换到 B 想想,题意很复杂,我想了一会发现有
没有办法,我只能回去做 A,又想了一会还是不会有道理的做法,感觉实在没办法了,只能交乱搞了。选了一个我觉得最靠谱的乱搞交上去,一看发现 70 分左右,很对啊!又加了点乱七八糟的优化,接近 80 分了,还剩 2.5h 左右。既然 80 分了,B 我现在的精神状态又做不出来,我只能去试试完全看不透的 C 了。
看到 C 先思考了一下 checker 是怎么写的,不幸的是我状态实在太差了,所以我没看出来…… 10min 后我觉得今天看来是做不出什么有道理的东西了,于是决定转变方向试没道理的东西。简单分析了一下构造何种形态的解一定是对的,发现 C 其实可以对每个叶子任意输出一个 DFS 序,这确实是一组合法解。写了一下交上去发现 ~60 了??感觉今天乱搞很对啊!于是决定今天继续用力乱搞,沿用之前的分析发现一个菊花其实是很可以优化的,写了下 ~85 了,又加了点神秘优化,~93 了!此时还剩 1.5h 左右,对 A 稍微优化了一下,82 了!感觉 A 和 C 竟然现在都没什么得分空间了,回去做 B 好了。
回去看 B,先卡了卡常把第一个包过了,然后发现 fxt 也在调 B 的代码。
最终得分 fxt 好像没发现其实 C 输出所有叶子有 60 分,感觉很遗憾。
听讲题,在讲题时我终于发现我一看到 A 时就想起来的 “我研究过取出度最大的点就一定距离
另外发现 B 的出题人猜错了,不是 EI 而也是 siqi,siqi 太有实力。想了想感觉标准分 248 没什么本质难度,但反正就是没做到。
day3 前我妈听说我连续两天只睡了 4h,比较担心我。同时考虑到其实住酒店家长是可以进的,于是决定特地来北京陪我一会。这天晚上睡得还行,中间醒了一次但断断续续睡了 8h 左右。
进场发现右边是 ylx,很有实力!看三个题,A 是一个关于 上升/下降 的数数,虽然不知道为什么要在环上做,但这个我应该很擅长啊!B 是
然后决定先做做 A,发现做连续段 DP 确实可以多项式复杂度,但感觉要记很多个元。考虑到做 CF2018F3 时太急着写记太多元的暴力导致简单做法没看出来的惨痛经历,我想想觉得肯定有什么简单转化,还是别往记一堆元的暴力上面想了。因为
B 感觉做法很显然啊!把这个过程画出来并倒着做,一下就看出来怎么做了!但一开始细节没全编对,所以还是对拍调了一会,还剩 3h 时才过。
回过头来看 A,决定继续找简单转化。在试了很多很多种拆贡献的方法之后我终于发现了一个重要事实:按照顺时针转环,RB 的出现次数总和 BR 相等,而可以拆贡献使得这两种情形的权值分别是
C 看了看发现得到任意定根后的拓扑序就简单了,可以整体二分求每个点的父亲。但我错估了这题的难度,觉得如果求任意定根后的拓扑序也很简单的话这题不太会出现在这里。求拓扑序只想到了一个 shuffle 整个点集后试着加入每个点,如果其父亲也已经被加入那就顺利加入的不牛做法。实际上如果树是链就直接被卡到 ylx C 只有 30 分?
最终得分
听讲题,A 和出题人想的完全一样!最后一步 FFT 也是对的,主要是我没时间写了。然后听大家吐槽说
疏散的时候 shz 和我说他只会找拓扑序后面不会,我听他说直接问全集去掉每个点就可以知道以每个点为根时其大小最大的儿子,从而确定以重心为根时每个点的子树大小,然后排序一下就是拓扑序了。感觉这个 C 放 CF 上看大家都过了我肯定也会了,主要是没看出难度。想了想标准分 285 也没有本质难度啊,甚至 300 如果时间足够也没有本质难度,但反正还是遗憾离场了。感觉这场运气也不太好,特别是 C 满分要求次数
CTT 结束后总榜是 rk5 啊,感觉还是稍微有点难过,主要是 day2 和 day3 都被莫名其妙的理由被爆了 40 分。但其实结果还能接受,当然是要继续的。然后看到一些 CTT 中成绩不太理想的同学也还在训,感觉他们很有毅力啊,很厉害!
然后就要写论文了,我论文要写的内容也早就定好了:4 月的时候做出了一个线性基相关问题的更优解法,还挺有趣的,当然要写这个了。写了几天之后发现我的带删前缀线性基怎么只有部分前缀性?随手捏了个例题就做不了了!于是开始思考这个例题到底怎么做,断断续续想了两天貌似得到了一个做法,写了写发现假了!幸好保留整体思路,用力修了修细节修对了,能和暴力拍上了。很激动,决定把这个称为 “具有完全前缀性的带删线性基”。
期间钱哥说 PKUWC 缺投啊,我就把之前做题的时候捏出来的一个感觉还挺清新有趣的题投了过去。过了几天说投中了!但这题数据很难造一开始想让 shz 造,但最后他也说太难造摆了。最后我改了下要求的东西,虽然做法更显然了但不然数据造不出来,也没办法。最后比赛的时候发现最后一个包有没想到的暴力冲过去了,非常遗憾。
然后中间就正常训了训,最后备战了一会期末考,感觉没啥好说的。
期末考完回 HEZ 机房了几次,然后转眼就 CTS 了。CTS 讲课我看了眼发现都不太能听,要么就是太难了要么就是讲的没啥用,第一天 zak 的讲课看上去比较靠谱就去听了一下,然后发现我的论文怎么一道题直接被爆了。幸好后来做出了 “具有完全前缀性的带删线性基”,不然好像论文还真没什么可讲的了。
营员交流的 slide 本来是按照 15min 准备的,结果最后说只有 10min。想想把被 zak 爆的题删了刚好省 5min,结果最后好像稍微短了点,9min 左右就结束了。最后看营员交流分不是很高,但我觉得我的带删前缀线性基很有趣啊!不过只差
CTS day1 前换了种更靠谱的安眠药,吃完后不久就睡着了,然后症状变为了凌晨 4 点就醒了。又尝试入睡了两次,每次分别睡了 1h,到 6 点实在睡不着了,发呆了一会。然而比赛要拖到 10 点才开始,中间又发呆了很久,倒也不算太紧张。
CTS day1 进场发现坐在一列的最前面,所以我也不知道附近都有谁。看三个题,A 看上去很离谱,如果没有简单性质的话感觉就很难做,部分分看上去也很不友善,
先试着找了找 A 的简单性质,猜了几个结论但画了画都叉掉了,30min 也完全没做出多项式复杂度做法,第一个 2 分的包也不会!感觉不是简单题,B 也暂时不想做,先看 C。C 马上就会了
决定试着做一做 B,当然要先做第一问了。试着分析了一下发现按照从高位往低位做很有结论,写了个我也不知道复杂度是什么,但其实记忆化一下就
又做了会 A,找到了 A 一个比较复杂的答案的形式,据此可以得到一个
然后试着 assert 了一下 assertion failed!不是,那这题是人能做的?直接放弃去看 B。想了 20min 第二问怎么求,但我第一问做了一个很不方便的转化,虽然对做第一问有帮助但导致做第二问更麻烦了,于是没怎么想出来。有点担心这个转化其实求不出所有解,于是用这个转化试着把之前记忆化后
纠正了对转化的认知后发现输出方案可以搜,但我似乎只想到了一个
最终得分 zhk 过了 A
听讲题,但是 A 根本没讲!不过听说 A 正解非常难写,std 写了 7k,zhk 过了写了 11k,感觉确实在正解意义上挺不可做的。B 发现我的转化做的不好,导致后面浪费了很多时间,最后其实是把我没写完的
感觉今天最后 2h 打得偏保守,所以最终得分不是很高。不过 B 转化不好再快速找到正确的方向可能确实有点困难,A 可能连部分分也放弃掉有点太鲁莽了。确实策略上是存在一些问题,不过也还好。
CTS day2 前一晚吃了安眠药之后变为凌晨 5 点醒了,睡到 6 点实在睡不着了,又发呆了一会。因为是最后一场了进场前还是有点紧张的,有点成败在此一举的感觉。
day2 进场发现坐在一列的最后面,但因为是前后的关系没注意旁边有谁。看三个题,A 题面里怎么有线段和极角的,这是我能做的题吗;B 通信,这是我能做的题吗;C 交互,给你两个随机数生成方式让你猜用哪种生成的,这是我能做的题吗。
好好好,这样玩是吧。我直接释怀了,看上去今天的题不是很想让我进啊!看到三个题我就感觉今天怎么打都进不了了,倒也不紧张了。但这毕竟是我的最后一场 OI 比赛啊,还是要认真打完的。
先想了想 B,感觉比较简单的策略是让每个节点都知道一个子集的节点的精确值,然后每轮拓展这个精确值集合,最后每个节点都知道全集就合法了。但毛估估一下,如果希望给节点
看到 A,先背了一遍极角排序并写了个
感觉过 A 的速度还可以,但剩下两个题没准会坐牢牢死,其实也没什么用,所以还不算太紧张。试着实现了一下 B 之前想的做法,直接对每个节点枚举大小最大的可以一轮内可以收到的
此时还剩 2h,因为 C 完全还没做,感觉还是应该试一试 C,如果 C 有更好的进展可以考虑放弃这个 35 分做法不写(因为纯暴力都有 11 分)。C 最显然的做法当然是直接算一算生成的随机数的
那只能回来写 B 的 35 分做法了,写了写在只剩 25min 的时候调对了。最后又试了试 C 的算占比,但没有多得分。
最终得分
听讲题,A 反正就是那样,和出题人想的没区别。B 是 siqi 出的,好像主要错在我觉得要给
感觉今天果然被交互和通信题爆飞了,但可能其他前排选手压力太大也没打好,所以最后苟住了。
day2 晚上背了很久自我介绍。第二天答辩,自我介绍应该背得还挺顺利,论文答辩事后来看因为有点紧张语速太快了,导致最后讲得也太快了没恰好贴到时限。提问环节被问了一个奇异搞笑问题,但我没听懂他想问什么,最后有点尴尬。最后没有意外 1234,进了。
稍微谈谈这场国家队选拔的结果吧。首先当然是有一些想进的人最终由于种种原因没进,感觉名额只有四个,确实是如果水平没有明显超一流的话说到底要看运气。感觉我理解中(或者说我认识的)的很有实力的人就远不止四个啊!但也没办法了。不过既然也都是集训队了,其实没进倒也不算是伤筋动骨,既然有书读了,未来的机会还很多(比如 xcpc,或者也不局限于算法竞赛),肯定可以赢回来的!另外我还注意到今年也有很多现在高二的同学在几场比赛取得了非常好的成绩,但其他几场或许是因为经验不足打得不太行,感觉有点像是去年的我。那么,这是否又会开启下一个轮回呢?
然后再来谈谈我的未来吧。我写到这里时发现本文介绍比赛的内容实在有些太多了,说白了这是因为现在我去回忆过去,只有比赛的记忆仍然无比清晰,别的都已经模糊了。虽然我去上预科的一部分目的也是觉得把精力全都放在一件困难、失败了就几乎没有收益的事上,会导致压力太大反而做不成,但最后结果还是事实上我对这件事无比看重,以至于其他的回忆相比之下都褪色了。我曾觉得我对什么事都称不上太 “热爱”,但或许也未必。
未来会是什么呢?最近的最明确的未来是首先得把 IOI2025 打完,然后得学学预科的课。或许这两件事就够我忙的了,再远的未来可以等到以后再想。
但当然,这个等待不能是永远,我也不可能打一辈子算法竞赛。但应该,先往前走走,我会逐渐知道答案是什么的。没什么好担心的,日子还是像以往那样,不会太好也不会太坏。