ACM程序设计大赛概况

ACM程序设计大赛概况

一、 ACM大赛简介

ACM国际大学生程序设计竞赛(ACM/ICPCACM International Collegiate Programming Contest)是由国际计算机界历史悠久、颇具权威性的组织ACM学会(Association for Computing Machinery,美国计算机协会)主办,是世界上公认的规模最大、水平最高的国际大学生程序设计竞赛,其目的旨在使大学生运用计算机来充分展示自已分析问题和解决问题的能力。该项竞赛从1970年举办至今已历27届,因历届竞赛都荟萃了世界各大洲的精英,云集了计算机界的希望之星,而受到国际各知名大学的重视,并受到全世界各著名计算机公司的高度关注,成为世界各国大学生最具影响力的国际级计算机类的赛事。

该项竞赛分区域预赛和国际决赛两个阶段进行,各预赛区第一名自动获得参加世界决赛的资格,世界决赛安排在每年的3-4月举行,而区域预赛安排在上一年的9-12月在各大洲举行。这项比赛是以大学为单位组队(每支队伍由教练、3名正式队员,一名后备队员组成)参赛。ACM/ICPC的区域预赛是规模很大、范围很广的赛事。中国内地从1996年开始参加ACM/ICPC亚洲区预赛,至今已历九届。在赛事的早期,冠军多为美国和加拿大的大学获得。而进入1990年代后期以来, 俄罗斯和其它一些东欧国家的大学连夺数次冠军。来自中国大陆的上海交通大学代表队则在2002年美国夏威夷第26届和2005年上海举行的第29届全球总 决赛上两夺冠军。这也是目前为止亚洲大学在该竞赛上取得的最好成绩。

二、           比赛形式

经过校级和地区级选拔的参赛组,于指定的时间、地点参加世界级的决赛,由3个成员组成的小组应用一台计算机解决68个生活中的实际问题。参赛队员必须在5小时内编完程序并进行测试和调试。

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

  比赛期间,每队使用1台电脑需要在5个小时内使用CC++PascalJava中的一种 编写程序解决810个问题(通常是区域选拔赛8题,全球总决赛10题)。程序完成之后提交裁判运行,运行的结果会判定为正确或错误两种并及时通知参赛队。每队在正确完成一题后,组织者将在其位置上升起一只代表该题颜色的气球。

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

三 .    基础知识储备

1.编程语言   
      
亚洲赛区的比赛支持的语言包括C/C++JAVAJAVA对于输入输出流的操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++10倍以上,而竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出了更高的要求,是相当不利的。

许多参赛同学C的基础知识刚刚学完,还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的,它们主要是看重了纯C在效率上的优势,只要提高了自己在算法设计上的造诣,纯C一样能发挥巨大的威力。

C++相对于C,在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性,并且能够很好地实现标准流与文件流的切换,方便了调试工作。C++的另一个支持来源于标准模版库(STL),库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长度,这可以节省一些时间。但是熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时间复杂度。  

2.         数学

虽然被定性为程序设计竞赛,但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现,这就是平时积累的数学基础知识不够。2007World Final的总冠军是波兰华沙大学,其成员出自于数学系而非计算机系,这就是一个鲜活的例子。

Ø  离散数学——作为计算机学科的基础,离散数学是竞赛中涉及最多的数学分支,重中之重又在于图论和组合数学,尤其是图论。图论之所以运用最多是因为它的变化最多,而且可以轻易地结合基本数据结构和许多算法的基本思想,较多用到的知识包括连通性判断、DFSBFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等。

Ø  组合数学——组合数学中的知识相比于图论要简单一些,但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组合数学在竞赛中很少以难题的形式出现,但是如果积累不够,任何这方面的题目都有可能成为难题。

Ø  数论——以素数判断和同余为模型构造出来的题目往往需要较多的数论知识来解决,素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后,核心算法往往要涉及数论的内容。

Ø  计算几何——计算几何相比于其它部分来说是比较独立的,较常用到的部分包括线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等。

Ø  线性代数——对线性代数的应用都是围绕矩阵展开的,一些表面上是模拟的题目往往可以借助于矩阵来找到更好的算法。

Ø  概率论——竞赛是以黑箱来判卷的,几乎很少用到概率算法,但这并不意味着概率就没有用。

Ø  高等数学——纯粹运用高等数学求解的题目比较少,但高等数学是很多算法的基础,需要掌握牢固。

四、           核心知识

1.         数据结构

掌握队列、堆栈和图的基本表达与操作是必需的,排序和查找并不需要对所有方式都能很熟练的掌握,但必须保证对于各种情况都有一个在时间复杂度上满足最低要求的解决方案。竞赛时对时间的限制远远多于对空间的限制,这要求大家尽快掌握以空间换时间的策略,对哈希表、二叉查找树等算法及其复杂度有比较全面的理性和感性认识。

2.         算法

算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。常用算法中的另一类是以相似或相同子问题为核心的,包括递推、递归、贪心法和动态规划。

五、           团队配合

信息学竞赛对于知识面覆盖的非常广,凭一己之力全部消化这些东西实在是相当困难的,这就要求尽可能地发挥团队协作的精神。同组成员之间的熟练配合和默契的形成需要时间,具体的情况因成员的组成不同而不同。

六、           勤加练习

通过具体题目的分析和实践,才能真正掌握数学的使用和算法的应用,并在不断的练习中增加编程经验和技巧,提高对时间复杂度的感性认识,优化时间的分配,加强团队的配合。总之,光有纸上谈兵是绝对不行的,必须要通过实战来锻炼自己。  

 

七、           参考网站

现在已经有了很多网上做题的站点,这些站点提供了大量的题库并支持在线判卷,只需要把程序源码提交上去,马上就可以知道程序是否正确,运行所使用的时间以及消耗的内存等等状况。下面推荐几个站点,每个站点的题都有一定的难易比例,系统地做一套题库可以对各种难度、各种类型的题都有所认识。  
1
Ural

Ural是中国学生对俄罗斯的Ural州立大学的简称,那里设立了一个Ural Online Problem Set,并且支持Online JudgeUral的不少题目算法性和趣闻性都很强。

2UVA

UVA代表西班牙Valladolid大学。该大学有一个那里设立了一个PROBLEM SET ARCHIVE with ONLINE JUDGE,并且支持ONLINE JUDGE,形式和Ural大学的题库类似。不过和Ural不同的是,UVA题目多的多,而且比较杂,而且有些题目的测试数据比较刁钻。如果说做Ural题目主要是为了训练算法,那么UVA题目可以训练全方位的基本功和一些必要的编程素质。   
3
ZOJ

浙江大学建立的ONLINE JUDGE,是中国大学建立的第一个同类站点,也是最好和人气最高的一个。这里目前有500多道题目,难易分配适中,且涵盖了各大洲的题目类型并配有索引,除此之外,ZOJJUDGE系统是几个网站中表现得比较好的一个,很少出现Wrong AnswerPresentation error混淆的情况。这里每月也办有一次网上比赛,只要是注册的用户都可以参加。  

 
 
  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值