2024年4月21日,IOI第33届全球冠军、ICPC全球总决赛第45届冠军&第46届亚军MIT队的队员邓明扬在知乎上分享他退役前的参加的第46届ICPC全球总决赛的过程和心得。
首先恭喜北大!
个人觉得这个结果还挺好。国内有许多热爱算法竞赛的人们,聪明努力而强大的jls更是很多人的偶像。北大夺冠会为人们带来很多鼓舞吧。
只是我有点对不起队友。我来讲讲MIT是怎么输的(笑)。整个故事有一种沙雕番剧里反派强行降智的幽默。

MIT由谦子,Anton和我构成。谦子是天才般的选手,兼具观察力、代码实力和乱搞天赋。和谦子组队非常幸福。Anton很聪明。虽然他不那么擅长写代码,但是经常做出深刻而智慧的观察。并且Anton真的很想赢。
前三个小时一切都很顺利。在交换了观察后,谦子轻松通过了R和X。看榜已经领先了三个题,我心中觉得比赛已经失去了悬念,于是开始了表演。下面是我做的事情。
1. 我发现Z有一个暴力做法。虽然不知道对不对,但我决定写一下帮出题人验一下数据。交上去T了,证明数据还挺强!
2. 还有一小时二十分钟左右Anton提出了完整的S做法,代码只有二十行。我听完觉得很对,认为一下子就能通过,甚至不过也能赢。
Anton很聪明,但并不擅长写代码。可这是我们最后一次比赛了,为了让Anton爽一爽,我决定扔给Anton来写。
3. Anton的S顺利写完了,交上去,WA。
由于做法听着就很对,我相信只是Anton写错了一点。于是我安排大家大眼瞪小眼看了半天,盯出了二十行代码的好几个错,改了几发还是WA。我觉得很有趣,然后接着盯着看。时间流逝了四十分钟,我没看出来更多的bug,但没有任何危机感。最后二十分钟谦子提醒大家要不写个对拍,但被我抢去瞎改代码没有写完。
赛后我发现代码只差了一个很小的case(过去的人数可以小于c),改了一行就过了,且对拍一下就能拍出来。
4. 所以诚实地讲,如果我没有在优势心理下带全队开浪,MIT写个对拍是很容易赢的。我通过努力,成功地将前半场一小时狂写300行代码的MIT,变成了一小时调30行代码都调不明白的MIT。大家庆祝的时候可以多拷打一下我。但希望大家记住谦子和Anton啊:他们是世界冠军级别的选手,只是遇到了世界冠军级别的战犯队友。
打完WF就正式退役了,希望队友能有光明的未来/得偿所愿。对不起啊。
过几天会把我的比赛策略发在知乎。根据和国内网友的交流,我觉得这个策略领先了时代几个版本。
我很喜欢国内的选手们。他们勤奋,有梦想,真的很热爱算法竞赛。希望这个策略能为他们带来帮助。我想多看他们赢几次,别再因为策略问题输给毛子了(划
(壹)
邓明扬最后提到的“毛子”,指的就是俄罗斯队伍。俄罗斯队伍,在国际青少年信息学奥林匹克竞赛(IOI)和大学生程序设计竞赛(ICPC)全球总决赛上,表现都很抢眼。尤其是在ICPC全球总决赛上,堪称一骑绝尘。比如上周在埃及合办举行的第46届和第47届的ICPC全球总决赛,北大队获得了第46届的冠军,俄罗斯国立研究型高等经济大学获得了第47届的冠军。
这两届总共有24支队伍获得了奖牌(每届12支队伍),中国大陆占了6席,即四分之一;俄罗斯占了4席。但是中国大陆的金牌数是2枚,俄罗斯的金牌数是3枚。整体感觉两个国家差不多。但是在ICPC四十八年的历史上,俄罗斯的表现比中国更好一些。
(贰)
国际大学生程序设计竞赛(International Collegiate Programming Contest,简称ICPC)是世界上规模最大、水平最高的国际大学生程序设计竞赛之一。ICPC由美国计算机协会(Association for Computing Machinery,简称ACM)于1970年发起组织,至今已有五十余年的历史。该赛事旨在展示大学生的创新能力、团队精神以及在压力下编写程序、分析和解决问题的能力。
ICPC赛事由各大洲区域赛(Regional Contests)和全球总决赛(World Finals)两个主要阶段组成。每个赛季持续时间约9个月,来自全球六大洲、超过100个国家和地区的两千余所高校的近五万名大学生参与该项赛事。区域赛通常在上一年的9月至12月举行,而全球总决赛则安排在每年的3月至5月。
ICPC竞赛的历史可以上溯到 1970 年,当时在美国德克萨斯 A&M 大学举办了首届比赛。作为一种全新的发现和培养计算机科学顶尖学生的方式,竞赛很快得到美国和加拿大各大学的积极响应。1977 年,在 ACM 计算机科学会议期间举办了首次总决赛,并演变成为目前的一年一届的多国参与的国际性比赛。迄今已经举办了34届。
最初几届比赛的参赛队伍主要来自美国和加拿大,后来逐渐发展成为一项世界范围内的竞赛。特别是自 1997 年 IBM 开始赞助赛事之后,赛事规模增长迅速。1997 年,总共有来自 560 所大学的 840 支队伍参加比赛。而到了 2004 年,这一数字迅速增加到 840 所大学的 4109 支队伍并以每年 10-20% 的速度在增长。
在赛事的早期,冠军多为美国和加拿大的大学获得。而进入 1990 年代后期以来, 俄罗斯和其它一些东欧国家的大学连夺数次冠军。2000年之后,中国也有一些大学获得了ICPC的冠军。赛事的竞争格局已经由最初的北美大学一枝独秀演变成目前的亚欧对抗的局面。ICPC竞赛已经成为全球最具影响力的大学生计算机竞赛,被誉为计算机软件领域的奥林匹克竞赛。不论是区域赛还是总决赛,ICPC都一直受到国际各知名大学的重视,并受到全世界各著名计算机公司的高度关注。
(叁)
ICPC(国际大学生程序设计竞赛)全球总决赛自1977年起举办,除了2020年因疫情没有举办外,到今年已经成功举办了47届。以下是历届ICPC全球总决赛冠军名单。
从统计表格中可以看出来,夺冠次数最多的国家是美国,共有18次,包含了最初13届的冠军,这与最初参加比赛的国家数量较少有关系。夺冠次数第二多的国家是俄罗斯,共有16次。夺冠次数第三多的国家是中国。
考虑到最初几届参加的国家数量很少,所以俄罗斯实质上是ICPC最强的国家。这从夺冠学校分布也可以看出来。
夺冠次数最多的高校是圣彼得堡国立信息技术、机械与光学大学,共7次夺冠。夺冠次数第二多的高校是圣彼得堡国立大学,共4次夺冠。
夺冠次数第三多的高校是上海交通大学和斯坦福大学,各3次。
夺冠两次的高校有6所:华沙大学、华盛顿大学圣路易斯分校、滑铁卢大学、加州理工学院、麻省理工学院、莫斯科国立大学。
还有18所高校获得过一次冠军,分别是北大、奥塔哥大学、贝勒大学、布拉格查理大学、俄罗斯国立研究型高等经济大学、弗莱堡大学、哈佛大学、哈维玛德大学、加州大学伯克利分校、加州大学洛杉矶分校、密苏里罗拉大学、密歇根州立大学、墨尔本大学、内部拉斯加大学、萨拉托夫国立大学、下诺夫哥罗德大学、约翰霍普金斯大学和浙大。
(肆)
俄罗斯在ICPC竞赛中表现出色,主要有以下几个原因。
首先是政府和高校的支持。俄罗斯政府和高校对算法竞赛的重视程度也很高。他们积极组织各类算法竞赛和培训活动,为学生提供广阔的实践舞台。同时,俄罗斯还通过引进和培养高水平的教练和专家,不断提升参赛队伍的整体水平。
其次是早期培养。俄罗斯对于有才华的年轻程序员的培养往往从中小学阶段就开始了。许多学生通过参加信息学奥林匹克竞赛等活动,早早地展现出在计算机科学领域的潜力和兴趣。俄罗斯青少年信息学奥林匹克竞赛(RusOI)分为五个级别:校级、市级、地区级、联邦级、国家级。通过层层选拔出来的青少年选手,到了大学就很容易做到更进一层楼。
第三是教育体系和文化。俄罗斯有着深厚的数学和科学教育传统,学生从小就接受严格的数学和逻辑训练。这种教育体系为学生日后在算法和编程领域的深入学习和竞赛打下了坚实的基础。
第四是俄罗斯的大学和中学普遍鼓励学生参与各类编程竞赛,提供了良好的竞赛环境和训练体系。这种环境促使学生在竞赛中不断提高自己的技能。
第五是人才的集中培养。俄罗斯的一些大学在计算机和数学领域有特招政策,集中培养有才华的学生,这种集中培养的策略有助于在国际竞赛中取得好成绩。
最后是成功的经验和传统。俄罗斯在ICPC等国际编程竞赛中屡获佳绩,这种成功的经验被传承下来,形成了一种积极向上的竞赛文化,激励着新一代的参赛者。
参考资料:
【1】ICPC官方网站
https://icpc.global/
【2】第46届ICPC Final分数榜
https://scoreboard.icpc.global/46/index.html
【3】第47届ICPC Final分数榜
https://scoreboard.icpc.global/47/index.html
【4】邓明扬在知乎上对第46届ICPC全球总决赛做的总结
https://www.zhihu.com/aria/question/653053550
【5】俄罗斯全国信息学奥林匹克竞赛介绍
https://ioinformatics.org/journal/INFOL017.pdf