许淇文IOI 2026参赛总结IOI 2026参赛总结2026-08-28 11:45:34

 
 

我非常荣幸能够作为中国国家队的一员参加IOI 2026

本次比赛在乌兹别克斯坦的塔什干举行。相较于上一届的选手来说,这次的旅途可以算是轻松愉快许多,去程只用六个多小时,回程甚至只要五小时。乌兹别克斯坦作为中亚国家,饮食习惯方面也与国内更接近,不过由于出发前听说比赛的住宿地点不在市区,还是备了一些零食和泡面留作应急。

为了适应当地环境,学会给我们订了早一天的机票,并且在比赛住宿的酒店预定了前一晚的房间。在机场落地后,现场的接机区域准备了一大桌的馕来欢迎各个代表队,我们也在旁边完成了落地的第一张合影。和我们同一辆大巴上还有刚落地的韩国队。我与一位韩国队的选手之前就有过线上的交流,但是是第一次在线下见面。比赛前他还邀请我去参加了他和另一位韩国队选手命制的模拟赛,题目非常有挑战性,质量也很高。其中较难的两个题目我都没能通过,日本队的队长甚至两题加起来只获得了12分,它们的出题人都是一位很神秘的选手Jaewon Son。我们赛前研究对手的时候发现他从未参加过公开的各种网站上的比赛,甚至连账号都没有,由这两道题可见他的水平一定不简单。

第二天我们入住了主办方安排的酒店,在同一个园区里的另一栋楼。这次房间的安排变成了三人间,何宇翔被分到了和新加坡的两位选手一间。酒店的分配大抵是与队员来自的地区有关系,与我们一栋楼的是日本、韩国等几个亚洲队伍和澳大利亚队。之前就从上一届的国家队员口中听说过澳大利亚队的选手对三国杀的热爱,这次也确实如此。每天的fun zone都可以看到他们在玩三国杀,有一天晚上他们还邀请了我们去房间里一起。澳大利亚选手中有三位都会中文,不过过程中我们不少时间都在使用英文,可能趣味的卡牌游戏就是不需要高级的语言能力,就能让所有人收获到快乐。过程中我还收获了澳大利亚选手对我的英语的高度评价,我想可能是我之前的英语有一定的基础,听上去相比于往年的国家队选手有所不同吧。后来也有不少外国选手找我聊天,可以说是非常美好的经历。

这次比赛的华裔选手像往常一样十分多且分布在不同国家。我们在登机口就遇到了一位也是从北京出发的选手,活动的第一天又认识了更多来自中国的选手,他们之中有好几个都和我们中的某些人在同样的地方训练过。后来又认识了美国队、加拿大队、德国队、澳大利亚队等等队伍中的华裔选手。令我意外的是连多米尼加队都有一名会说中文的选手,还有一位志愿者朋友也自学了中文。除了选手之外,我还遇到了上一届的加拿大国家队Ryan Bai,这次他是作为赞助商前来,在比赛日的下午和两个比赛日中间的旅游日上都跟我聊了很多。这一届的一位加拿大选手是一个长得很帅气的小哥,我们经常在娱乐时间聊天,他和Ryan一样会说中文,我们聊起来就比较轻松,也就可以聊更多生活中的话题,不用担心词汇量问题。来自加拿大的说中文的人很多,我还知道一位彭教授,他曾经作为选手和领队都来过IOI,不过最近几年没参加。虽然他人不在场,但是我还是听人提到了他的名字,不知道他最近在忙些什么。

主办方准备的活动倒没有特别丰富,考虑到酒店的偏僻位置也确实合理。我们在休息日去了趟动物园,相比于国内的不同在于有些动物是可以近距离接触的,甚至我们过程中还看到了有一辆观光车从大型动物的区域内直接驶过去,几乎零距离接触了许多平常只能远观的食肉动物。但是当天的天气特别热,还好我们的guide给我们买了一个冰淇淋。观影活动本身不错,只是组织比较混乱,配合着天气让人有些不爽。另一点是电影选择了英配,却给的是俄语字母,可能对英语不好的选手是一个考验。两天比赛都结束之后有一个去山里的活动,可惜我身体不适选择了请假。比赛日下午的fun zone应该是娱乐活动中比较不错的一个,甚至可以在场地里使用主办方准备的电脑游玩反恐精英,累了也可以在懒人沙发上休息。

除了跟选手的交流之外,印度的副领队也跟我很熟,他与我与这次作为赞助商前来的touristAndrew一样,都经常在线上参加比赛,所以之前就认识。

除了比赛外的事情,一个也比较重要的部分就是比赛本身。热身赛入场的时候我发现韩国的神秘选手Jaewon就坐在我的斜前方。热身赛的题目和去年完全相同,虽然我早在去年就大概思考过,但是还是在场上被一个提交答案题的最后几分卡住了。不过这只是热身赛,我就没有过多担心。

虽然我的水平远远不及前几届的国家队队长,但是既然我CTS的发挥比较赏心悦目,让我到达了这个位置,我在IOI也把目标定的比较高。Day1进场之后我先尝试阅读了三道题,第一印象是感觉Ball Machine这道题的题面很长,有些没有完全读懂,但是既然是交互题,就大概率不是比赛中最简单的题目。对着第二题进行了一个简单的观察之后,我看出Tiling Game是一个无论如何都特别好做的题,于是我直接开始写代码。由于开场不太清醒有一发错误的提交,不过仍然是全场第一个通过题目的选手,这时候仅仅过去了不到二十分钟。紧接着我观察出了第二题Monuments是一个题意相对比较老套的题目,我判断这个题一定是需要通过的题,于是接着之前的观察继续做。不久我就发现这个题的暴力对我来说都算不上简单。我先写了一个平方复杂度的错误代码,交上去没有获得任何有意义的分数,然后又把其中可能写错的部分改成暴力仍然无法拿分。我立刻写了一个对拍,发现这两个代码的思路在比较靠前的部分就使用了错误的结论。后来我又努力写出了几版代码,都只能获得三分。现在比赛过去了两个小时左右,理智告诉我需要去先尝试第一题。

读懂了第一题的题面之后,我发现第三个子任务的部分分设计是,只要使用1次询问,使用和叶子数量相同的颜色数量就可以满分。这个提示性十分明显,我没花几分钟就获得了47分。这是一个相对来说十分慷慨的分数,于是我决定在挂着对拍的同时思考第一题更靠后的分数。在修改了几个第二题的小错误之后,我很快意识到第一题大概只能做到根号级别,并且直接根号分治就能获得一定的分数。这个题主要的难点在于设计一个比较合理且代码相对不难写的做法,因为优秀的做法是一定存在的,但是最后一个子任务优化一步或者一种颜色才仅仅只有1分。权衡之下我选择了一个在80分左右的特别好写的做法,并在快速实现之后回去思考第二题。可惜第二题经过又一个小时的思考仍然没有结果,我决定转而寻求暴力分。倒数第二个子任务的数据范围开得非常的诡异,看上去是给O(m^2)的做法准备的,但是O(nm)又不无可能通过,于是我开始朝着O(nm)的方向思考。经过不小的努力,最终我在比赛前五分钟左右写完了代码,可惜它没有办法通过倒数第二个子任务。最后五分钟我尝试去拼一个前面漏掉的五分的子任务,可惜也没有成功。

出场后发现我们的手机被guide带到了用餐的地方,于是过了不少时间才看到榜单。最后我第一天的总分是81+52+100=234,排在了第七名。从第三名开始的分数都差不多,何宇翔做出了Monuments,但是Ball Machine只有暴力分,排在第七。日本队长通过了Ball MachineMonuments写出了71排在第二,而赵晟昊成功通过了所有的题。我们进行了一些简单的讨论,发现我的第二题开场做的第一步转换就不对,反而大大增加了整个题的难度,而何宇翔确实知道Ball Machine大致的做法,但是他的做法虽然分数比我写的做法更高,却更难写,于是最后就没有写完。

第二个比赛日之前的休息日我重新分析了一下第一天的发挥,我觉得它大概是我的CTT的缩影:比赛中有一个题目是所有人都可以轻松解决的,而剩下的两个题都可做,却都偏难。两个题均会有选手通过,但都不好做,而我的策略却偏向于均衡做两个题,如果有题目卡住,会花更多的时间在卡住的题上,最终两个题都推进分数却一个都没法通过,总分会小于通过了两个题中任意一个的所有选手。但另一方面说,我在CTS的经验告诉我,如果比赛前半部分处在劣势位置,后半部分抱着坚定的目标就会让策略变得简单。对于第一天分高的选手,可能需要权衡怎么样保住位置,而我的策略更简单,就是把每个题都推进到接近可做分数的极限。下午也有很多人来问我上午的情况,不过我的心态还不错,心情也因为fun zone变得比较好,所以没有太大问题。

第二天开场之后我依然去通读了所有题目,然后很快就发现三个题目都比较难,只有第二题Magic City看上去是一个比较可做的题目,但是它又是一个有50个测试点的提交答案题,可能会暗藏一些奇怪的坑点。我临场决定每个题都先写一下代码感受一下难度,然后在选择有头绪的题继续做。最终,经过了一个多小时的尝试,我获得了Classroom的特殊性质的分数,Magic City的偶数部分的分数,和Partition的最基础的分数。这时显然是Magic City更好做,于是经过简单的处理我把奇数部分做到了14K的构造,这时候已经有七十多分了。剩下的分数有十分是做前面的K比较小的测试点,还有十分是完整做完奇数部分,看上去分数都比较少。于是我转而去做第三题。虽然剩下的两个题都是通信/交互,但是第三题看上去更像一个后期需要传统题处理的题目,因为它的部分分全部都看上去完全没办法做,也就是说这个题需要在看出关键观察之后做不少的时间复杂度优化。另一方面,这样的部分分意味着不知道关键观察的人很难获得较多的部分分,也就意味着是我翻盘的关键,于是我的目标是无论如何一定要把这个题做出来。支持这个决策的重要的一点信息是整场比赛的题目类型分布:两天比赛共有五个非传统题,只有一个传统题,且这六个题只有Tiling Game看上去比较亲民,这也就意味着我现在的分数,算上第三题的可以努力拼出的暴力分30和另外两个题能努力得到的一些分,已经超过金牌线了。事实证明最后的金牌线比我的估算还少一些。总之我尝试了Partition之后,通过分析两个人的可能策略,很快就确定了整体的做法需要围绕着一个固定的第二个人的策略完成,并且写出了一个第一个人的暴力代码。后半部分的优化看上去也很像比较经典的模型,但是吸取了Monuments上调试很久的经验,我提前写了对拍。事实证明我确实写出了几个假做法,不过在对拍之后最终还是写出了正确的二分代码,通过了Partition。这时候策略就比较简单了,我先去Classroom上完成了大部分比较好拿的分数,只在最后一个子任务上距离满分C=2差了2。紧接着我去Magic City手玩了一会,成功完成了奇数部分,只剩前面的K小的情况。这时候距离比赛结束也不久了,我短暂思考后发现不太会写搜索,模拟退火看上去几乎完全没有效果,现场也没法用Python调用SAT Solver,于是只好退回去想Classroom,可惜到最后都没有进展。

不过第二天74.80+89.47+100=264.27是一个无论怎么想都过关的分数。第二天比赛刚结束,还没走出考场之前,志愿者就已经恭喜了我,看上去这次比赛的志愿者位置和比赛座位两天都是固定的,他已经认出来我了。最终我领先了俄罗斯选手10分左右,翻到了最前面,而赵晟昊和日本队长Hirasawa都没有做出Partition,只获得了30左右的暴力分,掉到了第三和第四。比较可惜的是何宇翔在第一天领先的情况下今天依然保持自己的风格选择了更激进的策略,最后与金牌失之交臂。刘家炜同学的发挥就更加稳定,最终轻松获得金牌。而韩国选手Jaewon竟然只有铜牌,让我感到非常惊讶和遗憾。

在前几年的IOI之后,很多人都会觉得中国队四个金牌或者包揽前四是轻而易举的事情,但显然真正的比赛没有想象中那么简单。只有真正坐在赛场上才知道比赛的时候感受到的压力,作出每一步决策都是非常艰难的事情。特别是今年的题目有所创新,难度是历史新高,更是让人防不胜防。大家都非常努力,生活中总有命运使然或者造化弄人,但是对我们来说都没有什么好后悔的。澳门队还有一位比赛当时将要过生日的选手,听说他参赛了好几次,最终却还是没有拿到银牌。虽然结果可能不完美,但是比赛的经历,和所有人在午饭一起给他过生日的快乐,肯定是更重要和更让人开心的。

比赛的这些结果,离不开学会的老师们以及我们的教练们在背后的默默努力。感谢领队为我们保驾护航,帮我们在比赛前夜翻译题目。感谢学会的老师们为我们安排了在塔什干第一天和在北京的住宿和出行。感谢教练们精挑细选的国家队集训,不少创新的题目是应对这次创新IOI的最好的准备。感谢我的家人。感谢学长们和大家对我的帮助。感谢一路上遇见的大家。

总之,这次IOI是一次永远没法忘记的美好经历,也希望之后的国家队选手们继续拿下满意的成绩。