APIO 2025 游记

1. 前言

省选之后回去上了一个月的文化课,但是是以放松的心态学的。我当时是想三月放松一个月,四月五月认真学一段时间,六月再回去学一会学考,七月最后冲刺,这样不会太疲惫。这样的心态再加上因为各种原因(比如参加 THUPC 决赛)没怎么复习,于是月考就爆炸了。

语文喜提 59 分,之后语文老师颇有针对性地对全班同学说:“有些人不要以为语文随便学学就能考好”(忘了具体的话了,意思大概是这样)。化学后两题直接没做,喜提 41 分。补题的时候发现后两题并不困难。最后一周觉得得给文化课留一个好印象于是使劲学了学化学,发现找到手感了。但是现在发现 Deepseek 可以解决大部分化学题之后已经没有任何理由能说服我去找化学老师答疑了,于是现在我对化学老师产生了一种莫名的愧疚感。也许高三化学老师的作用会大一些。历史也爆炸了,得了 55 分。文科以后还是需要多练习啊。反正考场发现我拼尽全力写不完的时候别人已经睡了十几分钟了挺震撼的。我感觉我的手速也没那么慢啊。其他学科考的平平无奇,不想说了。

顺带把 THUPC 决赛也记录一下吧。chenzida 有事没去,于是我们队只有两个人。开场 xuanxuan001 速通了 K 并获得了首杀。我签了一些签到题(甚至有个弱智 dp 我不会还是 cyx 想出来的),cyx 也签了一些,到最后终于把签到题签完了,获得了 9 题四十多名的成绩。我应该是想出了三道题,写了六道题。感觉在高手云集且只有两个人的情况下达到中位数以上已经挺好的了。

清明之后就开始停课了。那段时间停课好像没什么感觉,每天都在训练,但是也没有感觉效率很高。一直在跟着梦熊的模拟赛打,其他时间板刷 ARC。有一天不知道为啥点开了末日三问然后看题解写掉了,之后发明了一种决策单调性优化 dp 处理块的分配的算法(其实很简单,只能算一个 trick)获得了末日三问的最优解。之后发了一个钓鱼帖,也算是当过一回 xxs 了。然后在帖子里有人提到了駄作 1e5 4s,于是我就学习了树分块并做了那道题。拼尽全力无法卡进 2s 以及无法得到最优解,但是还是发了一篇题解记录卡常技巧。这段时间训练重心还是代码能力。

时间过的太快了,中间有个游学还有五一,冲掉了很多时间。意识到这样训练下去不行,于是有一天晚上发了一个朋友圈规划了接下来的训练内容。不想搬上来了。反正训练重心要转移到思维上。我感觉我的代码能力已经超过大部分人了(比如几个小时速通末日三问和駄作)。又过了几天就来到了 APIO。

哦,还有一件事情是,我现在又恢复以前跑三千米的习惯了,不过是两天跑一次,其他时间打篮球。感觉 OI 对体能消耗太大了,最近体能越来越差,必须得提升上去。

2. 赛前

这次杨老师居然亲自带队了。5.15 下午到那里之后和另外两个人一起出去转了转,之后去操场发现有足球就踢了一回,来了一些人之后打了会比赛。和我们一队的还有 nfls 的一些人,不过感觉他们那块的风气实在不太好。

试机赛先写了一个 1e9 阶乘,要跑 5.3s 左右。加上 barrett 约减取模之后还跑了 4s 多,不知道是不是写法的问题。打了一个 1e6 的 ntt 发现跑了 180ms 左右,好像比其他地方慢一点。之后又速通了一个 NOIp T4 的 n^2 暴力分(用来测试 SelfEval)。打暴力是因为至今我还不知道那题的正解,而且 WC 试机赛重新思考 T1 不会所以现在也不敢开 T1 了。

睡觉失眠了,主要是不太适应环境,以及睡前喝了一些水、没拉蚊帐、有人打呼噜等原因。撑到了 00:30 起来玩了会手机上了个厕所,再去睡就睡着了。

第二天听课还是听不懂,早早地回去补觉了,不过第二节课应该比较有价值,打算以后再补。下午的博弈论比较有意思,但还是听不懂。但是这么短的时间内真的有人能听懂吗?可能听课的价值就不是让选手掌握算法,而是使选手认识到与很强的人的差距,以及感受很强的人的思维过程。

开幕式最后的《我爱你中国》触动到我了。它提醒我要把目光放长远。对于一个人,若在国家的视角下看,就没那么重要了。同理,对于一场比赛,在人的一生的视角下看,也没那么重要,所以坦然面对就行了。另外,我之前比较在意别人的目光,不过现在想明白了,没有人真正在意其他人,所有人都只是想在比较中促进对自己的认知而已。那我的成绩可以促进别人的认知,这是好事,我不应该为这件事感到担忧。开幕式结束后回去做了一道通信题(不会,看题解后写的),又做了一下新增的模板通信题。心态调整过来之后睡觉就比较顺利了。

第三天就到比赛日了。

3. 赛时

先看 T1。发现题目是一个非常简洁优美的交互题。看数据范围发现最后一档有 75 分,那这题要是不切直接少 75 分,于是这道题一定是签到题?发现最后一档有特殊的评分方式,那没事了。瞬间想到了生日悖论,这样的话次数确实是根号级别的。我想到大概可以随机一些数使得非零的 n 恰好有一半左右,这样就可以缩小可能的 n 的个数了。但是我根本没法标记这些 n,而且可能不同随机中剩下来的 n 倾向于相同,所以每次不能筛下来一半。我又想到可以确定 n 的区间。如果不等于 0 则 n 小于等于数的 max,否则如果可以构造方案使得等于 0 时 n 一定大于等于 max/2(或者类似的值),就可以达到缩小区间的效果了。当时感觉这个做法比较有前途,于是先跳过了。

看 T2。发现是我最不喜欢的博弈论。不过冷静了一下感觉应该是确定答案的数值(通常是特殊值)之后构造方案。看 m=2 发现等价于任意交换。然后看 e>m 没有什么思路,但是分值非常小,于是大胆猜测不可能超过初始 pi=i 的个数。写了一下得到了 12 分。然后思考 e=m-1,这时得到了一个稍微比三层嵌套的数组美观一点的形式:给树上每个点标号,每次 Bob 选择一条边交换边上两个下标。但是还是完全没思路。看 e=m=3,建出 i->pi 的环,发现大小为 3 时一定可以产生 1。又发现大小为偶数时无论如何都会产生一段长度为偶数的,所以不会产生奇数。而奇数一定可以产生一个偶数和一个奇数,于是答案就为奇数的个数。写了一下得到了 36 分。延续这个思路思考 e=m=4,发现大小为 4 时可以分裂成 1 和 3,但是其他的时候情况就非常复杂了。我完全无法找到一个式子表示答案。打算先跳过了。

看 T3。发现特殊性质只需要将前一半挪到 0,后一半挪到 25000 即可。进一步猜测答案一定可以达到 (n/2)(n-n/2)25000,而且这是上界。接下来我从每次只调整一个出发,发现移动的条件是向左或向右的一个直角中个数 *2<n-1。大胆猜测每次只需要找到一个可以移动的点使劲移动即可。直接实现了这个做法,竟然直接得到了 74 分。感觉优化也是可以的,但是比较难写,我就没细想(flag),先去看别的题了。

回看 T1。写了一个程序测试发现如果随机根本无法覆盖 max/2 的所有数。我又开始思考别的算法,比如给 0 和 2·3·5·7·... 这样的数,从而覆盖更多的数,但是我发现对于那些质数比如都得覆盖一遍,所以这样的算法无意义。我又想到是否可以使用一些特殊的序列作为查询序列。看上去斐波那契数列比较有前途,但是我试了一下还不如随机的效果。可能是灵光一现,我突然想到了一个靠谱的做法:分块,给出 [0,B-1] 以及所有 B 的倍数,这样就一定可以覆盖所有数了。我发现可以二分 n,这样就将 n 确定到了一个块内,然后再调整 [0,B-1] 的数,从而确定 n。从之前的思路中我还有一种在小集合中确定 n 的做法:随机一些集合然后计算答案,找到唯一匹配的(不过后来想了想不太行)。但是二分的 log 显然是需要去掉的。我又想到是否可以类似去年 T3 的思路,求出 n%B,再 CRT 起来。但是求 n%B 还是需要二分。我想到加权,因为现在函数的价值只有是否为 0。但是题目要求给出的数列互不相同。终于我发现分块的大小是可以动态调整的,于是判定 n 在一个区间就只需要根号长度的代价了。这样二分后的答案应该就比较对了。实现了这个算法得到了 78 分。进一步思考无果。

现在距离比赛结束还有一个半小时左右,我有三个选择:做 T1 剩下的 22 分,T2 e=m=4 的 24 分和 T3 剩下的 26 分。因为 T3 我还没完全想清楚而且目测非常难写,于是我先 pass 掉了这个选项。T2 的分数看起来是比较简单的、大家都能拿到的,于是我开始思考 T2。我将 <=8 的每个环长的情况都模拟了一遍,但是找不到任何思路。而且涉及到环的合并的情况看起来更加困难。最终我放弃了这个部分分。我有点忘了我有没有回去思考 T1 了,如果没有的话就是在 T2 之前思考的。反正我最终推测正解可能是调整 mid 的位置使得开根的那个长度再短一点,再通过随机化使得不一定每次都走大的区间,但是这会产生非常恶心的细节,我现在还没想明白。我当时觉得这可能会导致接下来进入调参的垃圾时间中,所以不打算实现这个算法。

最终我在还剩 1h 的时候开始思考 T3。我先想的是对每个序列中的点维护是否可能,但是修改是区间覆盖,我可能需要平衡树维护这些点的顺序,这会非常难写。接下来我发现我可以维护值域上的点而不是序列上的点,然后对值域上的点开一个 set 维护序列上的点,这样就可以做了。于是我开始写,硬着头皮写下去了。我还剩 30 分钟调题,可惜最后没调出来。

最后的心态出了点问题。剩 1h 的时候我还觉得 T3 如果会的话就一定能写出来,但是写着写着就有一种不详的预感——我要调不出来了,于是调题的状态受到影响了,最终也确实没调出来。我预判错了我的思路的代码量,导致代码逐渐增多的时候心态就会产生变化。之后看代码发现我写了 5k,看来这样的代码量我还是不能轻松拿捏啊。

最终 SelfEval 的测试成绩:78+36+74=188

4. 赛后

出考场遇到 cyx 发现他在一个非常大的区间波动,最低分与我接近。学弟 ljh 得了 99 分。同宿舍的 ds 得了 130+ 左右的分。看了看群发现这场确实比之前的难。

回到宿舍后我直接拉着 ljh 去踢球了,但是我踢得非常累,一直在喘气,可能是打比赛的 5h 消耗太大了。回到宿舍后躺在床上但没睡着,不想去讲题,于是自己一个人在学校里溜达。走到篮球场发现地上有一个球,于是又投了会篮。回宿舍之后忘了干啥了。

第四天去听课,但是实际上一直在群里看分数线。最终分数线是 193,还是在意料之中的。发现水群太浪费时间了,听课又听不懂(因为前面没认真听),所以回宿舍。途中把那个群退了。回去后开始调 T3,但是中途注意力分散跑去看游记了。看到了这篇游记,我觉得他写的非常好,而且精神状态也比别人好太多了。把 OI 的生活比作“柴米油盐”太深刻了。真正的突破是在一点一点的积累中产生的。后来回去调题,发现线段树预处理的范围开了 n*4 而不是 2e5。改了之后竟然直接过了自己造的数据。这下真遗憾离场了,就几个字符的问题。

下午去社会实践,实在是太无聊了。我完全对人文景物的讲解不感兴趣,不知道为什么。回去之后和同学没走在一起,于是我就自己在学校里玩了玩。这个学校真的太美了。走到了一片树林,还有一个池塘,那种静谧的环境让人太舒服了。之后随便溜达走到了篮球场,与一些人打了一个半小时球。发现 OIer 的篮球水平比足球水平强太多了。而且我最终也不是很累,比昨天强多了,可能是喝了一天葡萄糖水导致的。快速吃完饭后就去闭幕式了。

吃饭以及去闭幕式的路上发现有一对在 OI 圈非常知名的、我关注了好久的初三 cp 分手了。感觉结果早已注定了,早恋本身就很没有前途。感觉早恋这种心理的产生就是误认为现在的这件事是“好”的,因此是重要的,失去了就不能再有了,但是实际上这并不是“好”的。相同事情上以后有比这更“好”的时间,相同时间上有比这更重要的事情(比如学习)。本质上还是没有判断清楚重要性,分清主次。

闭幕式的节目实在是震撼。我不太想在这里评价(因为写出来太奇怪了)。总之主办方办的非常用心。

第五天就回北京了,没什么可说的。

5. 总结

我感觉我的问题主要是没有快速地开 T3 的最后 26 分。做完 74 分之后应该继续想剩下的分的,因为那时还属于读题阶段。当思维没有停滞的时候,应该继续想下去的,这样总是不劣的。而且读题阶段主要任务就是对每道题的难度进行判断,那最后 26 分想都没想,就相当于没有完成这个任务。所以这是以后策略要调整的地方。

还有就是考场的时候不够理性。T2 的 e=m=4 明显是我完全不会的那种部分分,而 T3 的 26 分应该是我会但是比较难写的。我当时可能是选择逃避困难,先去想好写的。但是实际上越是难写的越需要时间。我应该合理的分配时间。

还有一个问题是从 WC、联合省选那时候就有的,就是对于难题的部分分毫无思路。WC 的 T2,联合省选的 D1T3、D2T2、D3T3,APIO 的 T2 都只有最低档部分分。我感觉以后训练的时候可以刻意地训练一下做部分分的能力。对于不可做题,也可以思考一下那些部分分。

这次的差 5 分金牌也让我对自己实力有了一个更准确的定位。接下来好好地备战 NOI 吧。

posted @ 2025-05-20 18:25  lotus_f  阅读(71)  评论(0)    收藏  举报