ACM程序设计大赛是大学级别最高的脑力竞赛,素来被冠以"程序设计的奥林匹克"的尊称。大赛自1970年开始至今已有30年历史,是世界范围内历史最悠久、规模最大的程序设计竞赛。比赛形式是:经过校级和地区级选拔的参赛组,于指定的时间、地点参加世界级的决赛,由3个成员组成的小组应用一台计算机解决6到8个生活中的实际问题。
1、历史
竞赛的历史可以上溯到1970年,当时在美国德克萨斯A&M大学举办了首届比赛。当时的主办方是the Alpha Chapter of the UPE Computer Science Honor Society。作为一种全新的发现和培养计算机科学顶尖学生的方式,竞赛很快得到美国和加拿大各大学的积极响应。1977年,在ACM计算机科学会议期间举办了首次总决赛,并演变成为目前的一年一届的多国参与的国际性比赛。迄今已经举办了36届。
最初几届比赛的参赛队伍主要来自美国和加拿大,后来逐渐发展成为一项世界范围内的竞赛。特别是自1997年IBM开始赞助赛事之后,赛事规模增长迅速。1997年,总共有来自560所大学的840支队伍参加比赛。而到了2004年,这一数字迅速增加到840所大学的4109支队伍并以每年10-20%的速度在增长。
1980年代,ACM将竞赛的总部设在位于美国德克萨斯州的贝勒大学。
在赛事的早期,冠军多为美国和加拿大的大学获得。而进入1990年代后期以来, 俄罗斯和其它一些东欧国家的大学连夺数次冠军。来自中国大陆的上海交通大学代表队则在2002年美国夏威夷第26届、2005年上海举行的第29届全球总决赛和2010年哈尔滨举行的34届全球总决赛上三夺冠军。浙江大学代表队则在2011年35届全球总决赛上首夺冠军。这也是目前为止亚洲大学在该竞赛上取得的最好成绩,赛事的竞争格局已经由最初的北美大学一枝独秀演变成目前的亚欧对抗的局面。
2、比赛目的
比赛参赛队员必须在5小时内编完程序并进行测试和调试。此种大赛对参赛学生的逻辑分析能力、策略制定和脑力方面具有极大的挑战性。大赛提倡在压力较大的情况下,培养学
生的创造力、团队合作精神以解决竞赛的问题,从而挑选和发掘世界上最优秀的程序设计人才。
3、评分办法
竞赛进行5个小时,一般有6—8道试题,由同队的三名选手使用同一台计算机协作完成。当解决了一道试题之后,将其提交给评委,由评委判断其是否正确。若提交的程序运行不正确,则该程序将被退回给参赛队,参赛队可以进行修改后再一次提交该问题。程序运行不正确是指出现以下5种情况之一:
(1)运行出错(run-timeerror);
(2)运行超时〔time-limitexceeded);
(3)运行结果错误(wronganswer);
(4)运行结果输出格式错误(presentationerror)。
(5)运行内存溢出( Memory Limit Exceeded);
竞赛结束后,参赛各队以解出问题的多少进行排名,若解出问题数相同,按照总用时的长短排名。总用时为每个解决了的问题所用时间之和。一个解决了的问题所用的时间是竞赛开始到提交被接受的时间加上该问题的罚时(每次提交通不过,罚时20分钟)。没有解决的问题不记时。美国英语为竞赛的工作语言。竞赛的所有书面材料(包括试题)将用美国英语写出,区域竞赛中可以使用其它语言。总决赛可以使用的程序设计语言包括pascal,c,c++及java,也可以使用其它语言。具体的操作系统及语言版本各年有所不同。
4、历史赛事
2009-2010年ACM-ICPC赛事介绍
2009年第34届ACM-ICPC亚洲区预选赛在中国大陆地区有五个赛区, 分别是哈尔滨赛区(由哈尔滨工业大学承办)、合肥赛区(由中国科学技术大学承办)、宁波赛区(由浙江大学宁波理工学院承办)、上海赛区(由东华大学承办)和武汉赛区(由武汉大学承办)。
亚洲地区的高校可组队参加在亚洲的所有赛区的预选赛, 但每位参赛选手在一个年度内至多只能参加两个赛区的预选赛。2009年度亚洲区共设立了十五个赛区, 每个赛区的第一名将自动晋级全球总决赛。
2010年的全球总决赛由哈尔滨工程大学承办, 全球有100支参赛队获得参加于2010年2月1日至6日在哈尔滨举行的全球总决赛资格。
2010年第35届ACM-ICPC亚洲区预选赛在中国大陆地区有五个赛区, 分别是哈尔滨赛区(由哈尔滨工程大学承办)、天津赛区(由天津大学承办)、成都赛区(由四川大学承办)、杭州赛区(由浙江理工大学承办)和福州赛区(由福州大学承办)。
第36届ACM国际大学生程序设计竞赛中国大陆共有5个赛区,分别为大连赛区(大连理工大学承办)、上海赛区(复旦大学承办)、北京赛区(北京邮电大学承办)、成都赛区(成都东软学院承办)和福州赛区(福建师范大学承办)。
第37届ACM国际大学生程序设计竞赛中国大陆共有5个赛区,分别为长春赛区(东北师范大学承办)、天津赛区(天津理工大学承办)、杭州赛区(浙江理工大学承办)、金华赛区(浙江师范大学承办)和成都赛区(成都东软学院承办)。
5、规则
ACM/ICPC以团队的形式代表各学校参赛,每队由3名队员组成。每位队员必须是入校5年内的在校学生,最多可以参加2次全球总决赛和5次区域选拔赛。
比赛期间,每队使用1台电脑需要在5个小时内使用C、C++、Pascal或Java中的一种编写程序解决8或10个问题(通常是区域选拔赛8题,全球总决赛10题)。程序完成之后提交裁判运行,运行的结果会判定为正确或错误两种并及时通知参赛队。而且有趣的是每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球。
最后的获胜者为正确解答题目最多且总用时最少的队伍。每道试题用时将从竞赛开始到试题解答被判定为正确为止,其间每一次提交运行结果被判错误的话将被加罚20分钟时间,未正确解答的试题不记时。例如:A、B两队都正确完成两道题目,其中A队提交这两题的时间分别是比赛开始后1:00和2:45,B队为1:20和2:10,但B队有一题提交了2次。这样A队的总用时为1:00+2:45=3:45而B队为1:20+2:10+0:20=3:50,所以A队以总用时少而获胜。
与其它计算机程序竞赛(例如国际信息学奥林匹克,IOI)相比,ACM/ICPC的特点在于其题量大,每队需要5小时内完成8道题目,甚至更多。另外一支队伍3名队员却只有1台电脑,使得时间显得更为紧张。因此除了扎实的专业水平,良好的团队协作和心理素质同样是获胜的关键。
6、决赛介绍
赛事由各大洲区域预赛和全球总决赛两个阶段组成。各预赛区第一名自动获得参加全球总决赛的资格。决赛安排在每年的3-4月举行,而区域预赛一般安排在上一年的9-12月举行。一个大学可以有多支队伍参加区域预赛,但只能有一支队伍参加全球总决赛。
全球总决赛第一名将获得奖杯一座。另外,成绩靠前的参赛队伍也将获得金、银和铜牌。而解题数在中等以下的队伍会得到确认但不会进行排名。
7、历届冠军
1977年以来历年全球总决赛的冠军:
年份 |
总决赛地点 |
冠军大学 |
国家 |
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年 |
美国亚特兰大 |
密歇根州立大学 |
美国 |
8、中国竞赛情况
亚洲区预选赛
ACM国家大学生竞赛自1996年起设立中国大陆地区预选赛赛区,并由上海大学承办,至2001年总决赛止,连续举办五届。之后在境内设置多个赛点,由各大学轮流主办地区性竞赛至今。
历年中国大陆举办区域赛地点:
年份 |
竞赛地点 |
|
|
|
|
1996年 |
上海大学 |
|
|
|
|
1997年 |
上海大学 |
|
|
|
|
1998年 |
上海大学 |
|
|
|
|
1999年 |
上海大学 |
|
|
|
|
2000年 |
上海大学 |
|
|
|
|
2001年 |
上海大学 |
|
|
|
|
2002年 |
清华大学 |
西安交通大学 |
|
|
|
2003年 |
清华大学 |
中山大学 |
|
|
|
2004年 |
上海交通大学 |
北京大学 |
|
|
|
2005年 |
四川大学 |
北京大学 |
浙江大学 |
|
|
2006年 |
上海大学 |
清华大学 |
西安电子科技大学 |
|
|
2007年 |
西华大学 |
南京航空航天大学 |
北京航空航天大学 |
吉林大学 |
|
2008年 |
中国科学技术大学(特别赛区) |
北京交通大学 |
哈尔滨工程大学 |
杭州电子科技大学 |
西南民族大学 |
2009年 |
浙江大学宁波理工学院 |
中国科学技术大学 |
东华大学 |
哈尔滨工业大学 |
武汉大学 |
2010年 |
哈尔滨工程大学 |
天津大学 |
四川大学 |
浙江理工大学 |
福州大学 |
2011年 |
大连理工大学 |
复旦大学 |
北京邮电大学 |
成都东软学院 |
福建师范大学 |
2012年 |
东北师范大学 |
天津理工大学 |
浙江师范大学 |
浙江理工大学 |
成都东软学院 |
世界总决赛
由上海交通大学承办的第29届ACM国际大学生程序设计竞赛全球总决赛于2005年4月3-7日期间在上海浦东的香格里拉酒店举行。总共有78支队伍参加总决赛的角逐,它们是从来自6大洲71个国家1582所大学的4109支队伍中通过之前的各级区域预赛中脱颖而出的。在当地时间4月6日上午举行的全球总决赛上,东道主上海交通大学代表队是所有参赛队伍中唯一一支解出8道题目的队伍,从而在时隔3年之后第二次夺得全球总冠军。
由哈尔滨工程大学承办的第34届ACM国际大学生程序设计竞赛全球总决赛于2010年2月在哈尔滨举行,上海交通大学再次夺冠。