ACM简介

ACM/ICPC(ACM International Collegiate Programming Contest)即国际大学生程序设计竞赛是由美国计算机协会(ACM)主办的,是世界上公认规模最大、影响力最广的、水平最高的大学生程序设计竞赛,是一项旨在展示大学生创新、团队合作、和在压力下编写程序、解决问题的竞赛。 ACM/ICPC从1970年至今,已经举办了30多届的比赛。此项赛事不仅仅可以培养大学生的创新能力,团队合作精神,以及在比赛的压力下在规定时间内解决指定问题的能力,同时也是对参赛队员知识掌握程度的检验。

竞赛的历史可以上溯到1970年,当时在美国德克萨斯A&M大学举办了首届比赛。当时的主办方是the Alpha Chapter of the UPE Computer Science Honor Society。作为一种全新的发现和培养计算机科学顶尖学生的方式,竞赛很快得到美国和加拿大各大学的积极响应。1977年,在ACM计算机科学会议期间举办了首次总决赛,并演变成为目前的一年一届的多国参与的国际性比赛。迄今已经举办了29届。 最初几届比赛的参赛队伍主要来自美国和加拿大,后来逐渐发展成为一项世界范围内的竞赛。特别是自1997年IBM开始赞助赛事之后,赛事规模增长迅速。1997年,总共有来自560所大学的840支队伍参加比赛。而到了2004年,这一数字迅速增加到840所大学的4109支队伍并以每年10-20%的速度在增长。

该项竞赛分区域预赛和国际决赛两个阶段进行,各预赛区第一名自动获得参加世界决赛的资格,世界决赛安排在每年的3~4月举行,而区域预赛安排在上一年的9~12月在各大洲举行。在中国, 因为希望参加比赛的队伍太多(2005年杭州赛区注册的队伍有1000多个), 主办方无法接待, 所以在区域赛之前一般会安排网络预赛. 参加本项比赛的选手至少需要掌握计算机科学的常用算法,基本的计算理论,(如:离散数学,具体数学,组合数学基础),数据结构基础,程序设计语言(规定是C/C++或者是Java)。在本项比赛中考察学生的不仅仅是能够完成指定任务的程序,更要求在完成程序的功能的基础之上提高程序的运行效率与空间占用率。你时时刻刻都应当去考虑如何去最大限度的优化,改善你的程序结构,已达到用最小的空间,最优的算法实现程序的功能。

ACM/ICPC 以团队的形式代表各学校参赛,每队由 3 名队员组成。每位队员必须是入校 5 年内的在校学生,最多可以参加 2 次全球总决赛和 5 次区域选拔赛。

比赛期间,每队使用 1 台电脑需要在 5 个小时内使用 C、C++、Pascal 或 Java 中的一种编写程序解决 6 至 10 个问题。程序完成之后提交裁判运行,运行的结果会判定为正确或错误两种并及时通知参赛队。而且有趣的是每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球。

最后的获胜者为正确解答题目最多且总用时最少的队伍。每道试题用时将从竞赛开始到试题解答被判定为正确为止,其间每一次提交运行结果被判错误的话将被加罚 20 分钟时间,未正确解答的试题不记时。例如:甲、乙两队都正确完成两道题目,其中甲队提交这两题的时间分别是比赛开始后 0:30 和 1:10,乙队为 0:20 和 1:05,但乙队有一题错误 1 次。这样甲队的总用时为 0:30+1:10=1:40 而乙队为 0:20+1:05+0:20=1:45,所以甲队以总用时少而获胜。

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

赛事由各大洲区域预赛和全球总决赛两个阶段组成。各预赛区第一名自动获得参加全球总决赛的资格。决赛安排在每年的 3-4 月举行,而区域预赛一般安排在上一年的 9-12 月举行。一个大学可以有多支队伍参加区域预赛,但只能有一支队伍参加全球总决赛。

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

更多信息请访问竞赛官方网站:http://icpc.baylor.edu/icpc/