ACM国际大学生程序设计竞赛

全球最具影响力的大学生程序设计竞赛

ACM国际大学生程序设计竞赛

ACM国际大学生程序设计竞赛(英文:International Collegiate Programming Contest;简称:ICPC、ACM-ICPC),由国际计算机学会(ACM)发起,由ICPC基金会主办,旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过多年的发展,ACM国际大学生程序设计竞赛已经发展成为全球最具影响力的大学生程序设计竞赛。[0][1]赛事由AWS、华为和Jetbrains赞助。北京大学设有ICPC北京总部,用于组织东亚区域赛。[2]ACM国际大学生程序设计竞赛的历史可以上溯到1970年,[0]首届比赛是在美国德克萨斯A&M大学举办的,最初几届的参赛队伍主要来自美国和加拿大,后来逐渐发展成为一项世界范围内的竞赛。1977年,在ACM计算机科学会议期间举办了首次总决赛,总共有来自560所大学的840支队伍参加了比赛,[3][2]1996年起设立中国大陆地区预选赛赛区,每年设多场分赛,由各大学申请承办。到2017年,增加到103个国家(地区)的2948所大学参赛。2018年起,美国计算机协会不再赞助ICPC。2022年国际大学生程序设计竞赛(ICPC)总决赛原计划在孟加拉国达卡市举行,但由于疫情等原因,最终第46届和第47届ICPC世界总决赛合并于2024年4月18日在埃及卢克索(Luxor)举办。[4][2][5][0]2025年9月4日,第49届国际大学生程序设计竞赛世界总决赛在阿塞拜疆巴库落幕,圣彼得堡国立大学以11题的成绩夺得冠军。[6]

ACM国际大学生程序设计竞赛(英文:International Collegiate Programming Contest;简称:ICPC、ACM-ICPC),由国际计算机学会(ACM)发起,由ICPC基金会主办,旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过多年的发展,ACM国际大学生程序设计竞赛已经发展成为全球最具影响力的大学生程序设计竞赛。[1][2]赛事由AWS、华为和Jetbrains赞助。北京大学设有ICPC北京总部,用于组织东亚区域赛。[3]

ACM国际大学生程序设计竞赛的历史可以上溯到1970年,[1]首届比赛是在美国德克萨斯A&M大学举办的,最初几届的参赛队伍主要来自美国和加拿大,后来逐渐发展成为一项世界范围内的竞赛。1977年,在ACM计算机科学会议期间举办了首次总决赛,总共有来自560所大学的840支队伍参加了比赛,[4][3]1996年起设立中国大陆地区预选赛赛区,每年设多场分赛,由各大学申请承办。到2017年,增加到103个国家(地区)的2948所大学参赛。2018年起,美国计算机协会不再赞助ICPC。2022年国际大学生程序设计竞赛(ICPC)总决赛原计划在孟加拉国达卡市举行,但由于疫情等原因,最终第46届和第47届ICPC世界总决赛合并于2024年4月18日在埃及卢克索(Luxor)举办。[5][3][6][1]2025年9月4日,第49届国际大学生程序设计竞赛世界总决赛在阿塞拜疆巴库落幕,圣彼得堡国立大学以11题的成绩夺得冠军。[7]

国际大学生程序设计竞赛以团队的形式代表各学校参赛,每队由至多3名队员组成。每位队员必须是在校学生,有一定的年龄限制,并且每年最多可以参加2站区域选拔赛。[8]每届赛事由各大洲的分区预选赛和全球总决赛两个阶段组成。各分区预选赛的第一名自动获得参加全球总决赛的资格。总决赛一般安排在每年的三、四月份举行,而预选赛一般安排在前一年的九到十二月份举行。每个大学可以有多支队伍参加不同的预选赛,但最多只能有一支队伍代表这个学校参加总决赛。[8][9]每个赛季持续时间约9个月,来自全球6大洲、超过100个国家和地区的两千余所高校的近五万名大学生参与该项赛事。国际大学生程序设计竞赛被誉为计算机软件领域的奥林匹克。竞赛提倡创新和团队协作,鼓励学生在构建全新的软件程序时尽情发挥创意,帮助学生检验自己在强压力下的工作能力,是世界各地计算机程序设计者大显身手的舞台,也是世界一流大学展现教育成果的最佳窗口。不论是区域赛还是总决赛,ICPC都一直受到国际各知名大学的重视,并受到全世界各著名计算机公司的高度关注。该比赛曾在美国的亚特兰大、加拿大的温哥华、瑞典的斯德哥尔摩、摩洛哥的马拉喀什等世界多地举办。[10]

历史背景

ACM国际大学生程序设计竞赛的历史可以追溯到1970年。当时,首届比赛在美国德克萨斯A&M大学举行,由the Alpha Chapter of the UPE Computer Science Honor Society主办。这种独特的竞赛形式为发现和培养计算机科学领域的顶尖学生提供了一种全新方式,迅速得到了美国和加拿大众多大学的积极响应。1977年,在ACM计算机科学会议上,首次举办了总决赛,此后,该竞赛逐渐发展成为一年一度的国际性赛事,吸引了多国的广泛参与。[9]

ACM国际大学生程序设计竞赛
ACM国际大学生程序设计竞赛

发展历程

在ACM国际大学生程序设计竞赛的早期阶段,参赛队伍主要来自美国和加拿大。随着时间的推移,这项赛事逐渐演变为一项全球性的竞赛。特别是自1997年IBM开始赞助赛事以来,其规模迅速扩大。1997年,共有来自560所大学的840支队伍参赛。到了2004年,这一数字激增至4109支队伍,来自840所大学,并且每年以10-20%的速度持续增长。在1980年代,ACM将竞赛的总部设在了位于美国德克萨斯州的贝勒大学。[9]

在赛事早期,冠军大多被美国和加拿大的大学所包揽。然而,进入20世纪90年代后期,俄罗斯和其他一些东欧国家的大学开始崭露头角,多次夺得冠军。来自中国大陆的上海交通大学代表队在2002年于美国夏威夷举办的第26届、2005年在上海举办的第29届以及2010年在哈尔滨举办的第34届全球总决赛中三次夺冠。浙江大学代表队则在美国当地时间2011年5月30日下午2时结束的第35届ACM国际大学生程序设计竞赛全球总决赛中荣获全球总冠军,成为继上海交通大学之后,第二所获得该赛事全球总决赛冠军的亚洲高校,这也是亚洲大学在该竞赛中取得的最佳成绩。如今,赛事的竞争格局已从最初的北美大学独占鳌头,演变为亚洲与欧洲高校的激烈对抗。[9]

2015年全球总决赛,圣彼得堡国立资讯科技、机械与光学大学AC了所有题目(13道),成为了ACM-ICPC历史上第一支在全球总决赛中AK的队伍,也成为了历史上获得ACM-ICPC全球总决赛冠军次数最多(6次)的队伍,这一表现,被当场比赛主持人称作the best of best of best。

2015年ACM-ICPC全球总决赛开幕式现场
2015年ACM-ICPC全球总决赛开幕式现场

2018年起,美国计算机协会不再赞助ICPC,由ICPC基金会主办。[6]2018年4月,ACM-ICPC在中国北京举行,由北京大学承办,最终北京大学最后时候完成G题夺得金牌。[11][12]2022年国际大学生程序设计竞赛(ICPC)总决赛原计划在孟加拉国达卡市举行,但由于疫情等原因,最终第46届和第47届ICPC世界总决赛合并于2024年4月18日在埃及卢克索(Luxor)举办。[5][13]

2025年9月,在阿塞拜疆举行的国际大学生程序设计竞赛(ICPC)世界决赛中,OpenAI、谷歌DeepMind两家公司的人工智能模型获得了金牌级别的成绩,顺利解出人类参赛者无法完成的问题。[14]第49届国际大学生程序设计竞赛世界总决赛的冠军由俄罗斯的圣彼得堡国立大学获得。[13]

中国赛区

中国大陆高校自1996年开始参加此项赛事的亚洲区预赛。1996年起设立中国大陆地区预选赛赛区,当年由上海大学承办,至2001年总决赛止,连续举办五届。之后在大陆地区设置多个赛点,由各大学轮流主办地区性竞赛。此外,大陆地区还承办过三次全球总决赛:2005年4月,上海交通大学承办第29届国际大学生程序设计竞赛全球总决赛;2010年2月,哈尔滨工程大学承办第34届国际大学生程序设计竞赛全球总决赛;2018年4月,北京大学承办第42届国际大学生程序设计竞赛全球总决赛。[10]

发起单位

ACM(国际计算机协会[1])成立于1947年,正值第一台存储程序数字计算机ENIAC诞生不久。其创立宗旨是“推进用于计算、推理和其他信息处理的新机器的科学、开发、构建和应用”。作为世界上最大的教育和科学计算协会,凭借绝对的领导地位,ACM始终致力于推行最高行业标准,表彰杰出技术人才,加强计算机行业的整体队伍建设,同时推动计算领域的发展,通过为成员提供终生学习、职业发展及与专业人士联谊的机会,提供丰富的资源以促进计算科学和专业的进步,并支持其在各自的专业领域取得长足进步。ACM拥有计算领域首屈一指的数字图书馆,并为会员和整个计算行业提供领先的出版物、会议以及职业发展资源。[15]

ACM是一个由志愿者领导并以会员需求为导向的组织。其取得的成就离不开众多像您这样积极参与的志愿者的努力。ACM的活动广泛而深入,包括组织会议、编辑期刊、审阅论文以及参与董事会和委员会等。了解您可以在ACM做志愿者的所有方式,共同推动ACM的持续发展。[15]

主办单位

ICPC基金会(国际大学生程序设计竞赛基金会)是一个501(c)(3)组织[注1],旨在推动竞技编程的艺术和科学,以造福社会。国际大学生程序设计竞赛(ICPC)在该基金会的指导下运作,基金会负责ICPC的服务、赞助、筹款和外联工作。ICPC基金会致力于展示新兴人才,并为后代提供成为严谨问题解决者的途径,让他们能够秉持ICPC道德准则,共同构建造福邻里的系统。[16]

ICPC基金会运营着诸如ICPC大学社区(ICPC University Commons,简称ICPC-U)等项目和倡议,该项目积极创造机会,尤其是为服务不足的群体提供帮助,并开展旨在连接ICPC校友的项目,以便他们能够继续蓬勃发展。ICPC基金会董事会拥有超过200年的ICPC社区服务经验,他们热爱社区对下一代的影响,并共同致力于鼓励和引导每一代人携手追寻和平与繁荣之路。[16]

赛事规则

ACM-ICPC以团队的形式代表各学校参赛,每队由至多3名队员组成。每位队员必须是在校学生,有一定的年龄限制,并且每年最多可以参加2站区域选拔赛。[8]

比赛期间,每队使用1台电脑需要在5个小时内使用C/C++、Java和Python中的一种编写程序解决7到13个问题。程序完成之后提交裁判运行,运行的结果会判定为正确或错误两种并及时通知参赛队。而且有趣的是每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球,每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。[8]

最后的获胜者为正确解答题目最多且总用时最少的队伍。每道试题用时将从竞赛开始到试题解答被判定为正确为止,其间每一次提交运行结果被判错误的话将被加罚20分钟时间,未正确解答的试题不记时。[8]

与其它计算机程序竞赛(例如国际信息学奥林匹克,IOI)相比,ACM-ICPC的特点在于其题量大,每队需要在5小时内完成7道或以上的题目。另外,一支队伍3名队员却只有1台电脑,使得时间显得更为紧张。因此除了扎实的专业水平,良好的团队协作和心理素质同样是获胜的关键。[8]

特殊荣誉气球
特殊荣誉气球

竞赛特点

1.参赛队伍最多由三名参赛队员组成。[8]

2.竞赛中命题10题左右,试题描述为英文,比赛时间为5个小时,前四个小时可以实时看到排名,最后一小时封榜,无法看到排名。[8]

3.竞赛可以使用的语言:Java, C, C++, Kotlin 和 Python。[8]

4.重点考察选手的算法和程序设计能力,不考察实际工程中常用的系统编程,多线程编程等等。[8]

5.选手可携带任何非电子类资料,包括书籍和打印出来的程序等,部分赛区会对选手携带的纸质资料做限制。[8]

6.评委负责将结果(正确或出错的类型)通过网络尽快返回给选手,除此之外不提供任何额外帮助。[8]

7.每个题目对应一种颜色的气球,通过该题目的队伍会得到对应颜色气球。每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。[8]

大赛现场
大赛现场

赛事构成

每届ACM-ICPC由各大洲的分区预选赛和全球总决赛两个阶段组成。各分区预选赛的第一名自动获得参加全球总决赛的资格。总决赛一般安排在每年的三、四月份举行,而预选赛一般安排在前一年的九到十二月份举行。每个大学可以有多支队伍参加不同的预选赛,但最多只能有一支队伍代表这个学校参加总决赛。[8][9]

入围世界总决赛名额(WF Slots)分为参与名额(Participation Slots)、奖牌名额(Medal Bonus Slots)和其他红利名额(Other Bonus Slots)三类。其中参与名额是从ICPC总部分配给各大洲区的参与名额(ParticipationSlots)中,由各大洲洲区主席确定并分配给洲子赛区的部分,其中各预赛区第一名自动获得参加全球总决赛的资格;奖牌名额是ICPC总部根据上一年度总决赛结果直接分配给获得奖牌的特定学校的名额;其他红利名额是各大洲区主席从ICPC总部争取到的额外奖励名额。[8]

全球总决赛第一名将获得奖杯一座。另外,成绩靠前的参赛队伍也将获得金、银和铜牌。而解题数在中等以下的队伍会得到确认但不会进行排名。[8]

北京交通大学队和ICPC主席Bill Poucher合影
北京交通大学队和ICPC主席Bill Poucher合影

评分标准

竞赛进行5个小时,一般有7道或以上试题,由同队的三名选手使用同一台计算机协作完成。当解决了一道试题之后,将其提交给评测机,由评测机判断其是否正确。若提交的程序运行不正确,则该程序将被退回给参赛队,参赛队可以进行修改后再一次提交该问题。程序判定结果有如下7种[8]:

1、Accepted. ——通过!(AC)[8]

2、Wrong Answer.——答案错。(WA)[8]

3、Runtime Error.——程序运行出错,意外终止等。(RE)[8]

4、Time Limit Exceeded. ——超时。程序没在规定时间内出答案。(TLE)[8]

5、Presentation Error. ——格式错。程序没按规定的格式输出答案。(PE)[8]

6、Memory Limit Exceeded. ——超内存。程序没在规定空间内出答案。(MLE)[8]

7、Compile Error. ——编译错误。程序编译不过。(CE)[8]

竞赛结束后,参赛各队以解出问题的多少进行排名,若解出问题数相同,按照总用时的长短排名。总用时为每个解决了的问题所用时间之和。一个解决了的问题所用的时间是竞赛开始到提交被接受的时间加上该问题的罚时(每次提交通不过,罚时20分钟)。没有解决的问题不记时。例如:A、B两队都正确完成两道题目,其中A队提交这两题的时间分别是比赛开始后1:00和2:45,B队为1:20和2:00,但B队有一题提交了2次。这样A队的总用时为1:00+2:45=3:45而B队为1:20+2:00+0:20=3:40,所以B队以总用时少而获胜。美国英语为竞赛的工作语言。竞赛的所有书面材料(包括试题)将用美国英语写出,区域竞赛中可以使用其它语言。总决赛可以使用的程序设计语言包括pascal,c,c++及java,也可以使用其它语言。具体的操作系统及语言版本各年有所不同。[8]

中国选手赛照
中国选手赛照

奖励情况

区域赛一般分别按10%,20%,30%的比例颁发金,银,铜奖(向上取整),即一般情况(120队伍)有12支队伍获金牌,24支队伍获银牌,36支队伍获铜牌,其余为优胜奖。

2010年亚洲区域赛中国大陆5大赛区由阿里巴巴公司赞助,获得金牌的选手可以享受绿色通道,进入阿里巴巴实习或参加工作。

2012年亚洲区域赛中国大陆5大赛区由华为公司赞助,有奖金(冠5000、亚3000、季2000,非冠亚季的金牌1200,FB(First Blood,指全场第一个解答出某道题) 800,最佳女队800,顽强拼搏500)。顽强拼搏是全场最后一个AC,且只AC1道题的队伍。

总决赛前十名的队伍将得到高额奖学金:第一名奖金为12000美元,第二名奖金为6000美元,第三名奖金为3000美元,第四名至第十名将各得到1500美元。除此之外还将承认北美冠军、欧洲冠军、南太平洋冠军及亚洲冠军。[8]

赛事意义

竞赛规定每支参赛队伍至多由三名在校大学生组成,他们需要在规定的五个小时内解决八个或更多的复杂实际编程问题。每队使用一台电脑,参赛者争分夺秒,与其他参赛队伍拼比逻辑、策略和心理素质。[8]

团队成员将在多名专家裁判的严格督察下通力合作,对问题进行难度分级、推断出要求、设计测试平台并构建软件系统,最终成功地解决问题。对于一名精通计算机科学的学生而言,有些问题只是精确度的问题;而有些则需要学生了解并掌握高级算法;还有一些问题是普通学生无法解决的,不过对于那些最优秀的学生而言,这一切都不在话下。[8]

竞赛的评判过程十分严格。我们分发给学生的是问题陈述,而不是要求须知。他们会收到一个测试数据实例,但无法获得裁判的测试数据和接受标准方面的信息。若每次提交的解决方案出现错误,就会受到加时惩罚。毕竟,在处理顶级计算问题时,谁也不想浪费客户的时间。在最短的累计时间内,提交次数最少、解决问题最多的队伍就是最后的胜利者。[8]

在IBM开展的众多学术活动中,赞助ACM-ICPC赛事占有十分重要的位置。此举旨在促进开放源代码编程技巧的发展,培养更具竞争力的IT工作人员,从而推动全球创新和经济增长。[8]

ACM-ICPC大赛是一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。[8]

历届冠军

年份总决赛地点冠军大学国家2025年阿塞拜疆巴库圣彼得堡国立大学[17][7]俄罗斯2024年哈萨克斯坦阿斯塔纳北京大学[18]中国2023年埃及卢克索HSE高等经济大学[19]俄罗斯2022年埃及卢克索北京大学[19]中国2021年孟加拉国达卡麻省理工学院[20]美国2020年俄罗斯联邦莫斯科莫斯科国立大学俄罗斯2019年葡萄牙波尔图莫斯科国立大学俄罗斯2018年中国北京莫斯科国立大学俄罗斯2017年美国南达科他州圣彼得堡国立信息技术、机械与光学大学俄罗斯2016年泰国普吉岛圣彼得堡国立大学俄罗斯2015年摩洛哥马拉喀什圣彼得堡国立信息技术、机械与光学大学俄罗斯2014年俄罗斯叶卡特琳堡圣彼得堡国立大学俄罗斯2013年俄罗斯圣彼得堡圣彼得堡国立信息技术、机械与光学大学俄罗斯2012年波兰华沙圣彼得堡国立信息技术、机械与光学大学俄罗斯2011年美国奥兰多浙江大学中国2010年中国哈尔滨上海交通大学中国2009年瑞典斯德哥尔摩圣彼得堡国立信息技术、机械与光学大学俄罗斯2008年加拿大班夫圣彼得堡国立信息技术、机械与光学大学俄罗斯2007年日本东京华沙大学波兰2006年美国得克萨斯州萨拉托夫国立大学俄罗斯2005年中国上海上海交通大学中国2004年捷克布拉格圣彼得堡国立信息技术、机械与光学大学俄罗斯2003年美国洛杉矶华沙大学波兰2002年美国夏威夷上海交通大学中国2001年加拿大温哥华圣彼得堡国立大学俄罗斯2000年美国奥兰多圣彼得堡国立大学俄罗斯1999年荷兰埃因霍温滑铁卢大学加拿大1998年美国亚特兰大布拉格查理大学捷克1997年美国圣何塞哈维玛德大学美国1996年美国费城加州大学伯克利分校美国1995年美国纳什维尔弗赖堡大学德国1994年美国菲尼克斯滑铁卢大学加拿大1993年美国印第安纳波利斯哈佛大学美国1992年美国堪萨斯城墨尔本大学澳大利亚1991年美国圣安东尼奥斯坦福大学美国1990年美国华盛顿奥塔哥大学新西兰1989年美国路易斯维尔加州大学洛杉矶分校美国1988年美国亚特兰大加州理工学院美国1987年美国圣路易斯斯坦福大学美国1986年美国辛辛那提加州理工学院美国1985年美国新奥尔良斯坦福大学美国1984年美国费城约翰霍普金斯大学美国1983年美国墨尔本内布拉斯加大学美国1982年美国印第安纳波利斯贝勒大学美国1981年美国圣路易斯密苏里-罗拉大学美国1980年美国堪萨斯城华盛顿大学圣路易斯分校美国1979年美国代顿华盛顿大学圣路易斯分校美国1978年美国底特律麻省理工学院美国1977年美国亚特兰大密歇根州立大学美国参考资料[9][13]

参考资料 20

  1. 【竞赛简介】ACM-ICPC国际大学生程序设计竞赛 — 厦门大学嘉庚学院校企校地合作部
  2. “计算机界的奥林匹克”,他们拿下1银3铜 — 深圳技术大学
  3. 竞赛知识我知道 | 第一期 ACM-ICPC国际大学生程序设计竞赛 — TYUT计算机科学与技术学院
  4. ACM国际大学生程序设计竞赛介绍 — 许昌学院信息工程学院(智能交通学院、软件职业技术学院)
  5. ICPC FACTSHEET–28July2022 The 45th Annual World Finals of the ICPC International Collegiate Programming Contest — ICPC
  6. ICPC竞赛 — 西安电子科技大学
  7. 我校代表队在第49届ICPC世界总决赛勇夺铜牌 — 中国科学技术大学新闻网
  8. ACM-ICPC国际大学生程序设计竞赛 — 四川师范大学物理与电子工程学院
  9. ACM-ICPC竞赛 — 上海交通大学
  10. 简介 — 北京大学
  11. 【金牌之路】“提升学习能力比名次更重要” ——访第42届ACM大赛北大队教练罗国杰 — 北京大学信息科学技术学院
  12. 倒计时30秒,北大代表队绝杀,再夺第42届ACM-ICPC总决赛金牌 — 搜狐网
  13. ICPC World Finals (26 contests) — Competitive Programming Hall Of Fame
  14. AI编程真的厉害,OpenAI、DeepMind模型夺得国际大学生程序设计决赛金牌 — 澎湃新闻
  15. Advancing Computing as a Science & Profession — ACM
  16. ICPC基金会 — ICPC
  17. The ICPC International Collegiate Programming Contest — ICPC
  18. 北大团队获第48届国际大学生程序设计竞赛全球总决赛冠军 — 澎湃新闻
  19. 2023年ICPC全球总决赛落幕 — 中国日报
  20. The ICPC International Collegiate Programming Contest — icpc.global

注释

  1. “501(c)(3) 组织”是美国税收法中的一种非营利组织类型。这个名称来源于美国国内税收法典(Internal Revenue Code)的第501(c)(3)条。以下是关于501(c)(3)组织的详细解释:
    定义
    501(c)(3)组织是指那些被美国国内税务局(IRS)认定为非营利性质的组织。这些组织的主要目的不是盈利,而是从事慈善、教育、科学、宗教、文学等活动,或者为公共安全进行测试。
    特点
    免税资格:501(c)(3)组织的收入通常免于缴纳联邦所得税。这意味着它们可以将更多的资金用于其使命和项目。捐赠免税:向501(c)(3)组织的捐赠通常可以作为慈善捐赠在捐赠者的个人或企业所得税中扣除。这鼓励了个人和企业向这些组织捐款。非营利目的:这些组织的主要目的是为了公共利益,而不是为了盈利。它们的收入必须用于实现其使命,不能分配给个人或股东。透明度和监管:501(c)(3)组织需要定期向IRS提交财务报告,确保其活动符合非营利组织的要求。它们还需要向公众披露其财务状况和活动。
广告位:底部(ad-bottom)—— 请到中台「公共区块」编辑此内容