刘海峰IOI2025参赛总结IOI2025参赛总结2025-09-20 09:25:51
很荣幸能代表中国参加在玻利维亚举办的第 37 届国际信息学奥林匹克竞赛(IOI2025),感谢 CCF 给我们提供优质的竞赛学习平台,使我们能够在竞赛前保持良好的状态。感谢 CCF 的领队、副领队以及两位观察员在旅途中照顾我们。赛前为帮助我们精准理解题面,加班加点完成翻译工作,甚至因比赛期间入住的酒店管理比较特殊,半夜会关门,他们没有顺利回到酒店。
这次比赛的地点是玻利维亚的法定首都苏克雷。去苏克雷的路途还是非常遥远的,坐飞机最优方案也要坐四十多个小时,需要在西班牙马德里转机和玻利维亚圣克鲁斯转机,签证手续也十分麻烦。
虽然苏克雷是玻利维亚的法定首都,但是玻利维亚的行政机关在拉巴斯,也就是说,苏克雷的经济条件并不是很好,IOI 的宿舍是八个人住一间。苏克雷地表温度没有太高,但是白天太阳直晒十分强烈,而且我们在苏克雷期间都没有下过一滴雨。
在 IOI 安排的宿舍里,我们和多个国家的选手进行了交流。我们英文并不是很好,但好在很多国家都有能听懂中文的选手,所以我们交流还算通畅。令我们感到吃惊的是,澳大利亚队居然会玩三国杀(一种中国的卡牌游戏),我很好奇的问他们不懂中文的人怎么玩,他们说直接用谷歌翻译翻一下即可。而且在后期,他们还教会了很多其他国家的选手,有的甚至还不懂中文,令我深感意外。
也许是时差问题,凌晨三四点的时候会有人去上厕所。又也许是晚上上厕所时厕所灯太亮了或者冲厕所的声音太吵了,然后上完厕所之后就会有其他人醒来,继续去上厕所……于是不一会儿,大家就都醒来了。甚至 DAY1 前凌晨陈昕阳凌晨去上厕所,出来时发现大家都看着他。还好我们晚上睡觉都比较早,所以没有太大的影响。
由于玻利维亚当地的饮食风格与日常习惯差异较大,如偏好生冷食品,我在赛程中出现了轻微的身体不适。
开幕式在一个露天的场地,表演了很多南美特色节目,因为 IOI 刚好赶上玻利维亚独立两百周年,所以玻利维亚的总统也来到了开幕式进行讲话。
DAY 1 早上,比赛开始,我先看了第二题 Triple Peaks,然后惊讶的发现第二部分居然是我最不擅长的提交答案题,好在这部分只有 30 分,于是我开始思考第一部分怎么做,很快我想到了一个 O(n^2) 的做法,然后我尝试思考如何优化,直觉感受了一下,加了一个类似“哪边小枚举哪边”的优化,这个优化虽然看起来非并不靠谱,但我一时间并没有想到 hack 数据,于是写了一下,交上去直接通过了第一部分。随后又以一种比较正常的节奏通过了 World Map 和 Souvenir,此时比赛才过了 2h,我开始全力做 Triple Peaks 的第二部分,然而我绞尽脑汁只想到了 1 1 2 3 2 1 1 这种结构的构造,显然个数是 O(n) 的,没有前途。然后我又花了很长时间想到了一种 O(n^{1.5}) 的构造,在 n 较大的情况下直接获得了满分,但 n 较小的时候仍然无法通过,甚至分数很低。于是比赛快结束的时候,我突然想起来陈昕阳教我的一种常见乱搞做法,迅速通过了 n=20,可惜最后并没有跑出来 n 更大的数据,我还尝试将两种方法结合,因为第一种方法中间会有很多空位,可惜写完之后比赛已经结束了。
比赛结束时,我的分数是 298.83,本次IOI中国队包揽前三。其实赛前我也发现了我并不是很擅长做涉及乱搞的提交答案题,可惜我找不到什么相应的题目来训练自己。
对于我来说,两场的比赛我第二场会比第一场好一点,因为我第二场并不会像第一场那样紧张。但也可能是因为太松弛了,我第二场出现了策略方面的失误。
第二场开始的时候,我先把三道题读了一遍,随后确定了 Festival 是签到题。我先想了一个贪心,但发现排完序就不知道该怎么做了。于是我先想了一个 O(N^2) 的动态规划,发现能优化但很难优化,于是我重新感受了一下这个 dp 过程,感觉有用的位置只有 O(N log N) 个,加了几个简单的剪枝并把 dp 数组开成了 vector,然后就通过了此题。随即我开始做 Migrations,然而我大概清楚这个通信题可能需要一个非常艰辛的卡常的过程,于是又去看 Obstacles 了。
然而 Obstacles 我看了一会儿并没有什么思路,题目甚至没有给 O(NM) 的部分分,我意识到这题也并不好做,我决定先去拿完 Migrations 的分再来写。Migrations 有两个部分,第一部分是简单的,经过一段时间的思考,我发现可以用后面的段去刻画前面的段的信息,然儿我发现最后一段怎么也不能被刻画。也许是被最后一点小挫折打破了心里的防线,我感觉这题 Z=4 的部分不太可做(赛后随便想一下就想出了一个能拿很多分的做法),实际上我可以做 Z=5,并且这也有相当多的分,但我看到 Z>4 的评分和 M 无关,并且分数是 35 - 25 乘一个特定的式子,我没仔细看这个式子是什么,就直接断定这档部分分肯定很少,于是只把第一部分给写了。事实证明这是一个错误的决策。随即我又去想 Obstacles,然而还是没有思路,于是我先想了一个 O(NQ log N) 的暴力,然后尝试乱搞,先写了个程序验证了正确性,然后又经过长时间的调试,我终于找到了错因并获得了 83 分。我尝试去做最后一档,然而此时时间并不是很多,代码一直运行时错误并且也查不出原因,比赛快结束的时候,我放弃了并切换到了 Migrations,我想看看 Z=5 有多少分,结果惊讶的发现有整整 35 分!少了 35 分,使得DAY2 一下与前列选手差距拉大,这一决策偏差导致分数损失较多。
结果也不出所料,我 DAY2 排到了第 30 名,最终排名第八,而且在我前面的选手第二题都拿到了至少 65 分的高分,如果我第二题有 65 分我也不会排到这个排名。
虽说这次 IOI 并没有打出理想的成绩,但给了我一个很好的和外国顶尖选手交流的机会,这将会是一个难忘的经历。