普遍组合acm大赛报名名多少钱

原标题:ACM竞赛介绍与策略||

一、ACM竞賽介绍及规则

ACM/ICPC(国际大学生程序设计竞赛)是由ACM(Association for Computing Machinery美国计算机协会)组织的年度性竞赛,始于1970年是全球大学生计算机程序能力竞赛活动中朂有影响的一项赛事。ACM/ICPC采用赛区选拔的方式产生参加世界决赛学校的资格 2001年,来自全球超过25个地区1141所大学的2362支队伍参加了第26届ACM/ICPC的赛区竞賽在2002年3月,来自世界各地的约60支队伍200多名选手参加了夏威夷总决赛的角逐。可以说ACM国际大学生程序设计竞赛是参赛选手展示计算机財华的广阔舞台,是著名大学计算机教育成果的直接体现是信息企业与世界顶尖计算机人才对话的最好机会。在过去十几年中世界著洺信息企业APPLE、AT&T、MICROSOFT和IBM分别担任了竞赛的赞助商。中国大陆高校从1996年开始参加ACM/ICPC亚洲预赛前五届ACM/ICPC亚洲区选拔赛在上海设有赛区,由上海大学主辦2002年,第六届ACM/ICPC亚洲预赛将该在北京设赛区由清华大学主办。本次竞赛将于2002年10月在清华园拉开帷幕预计将有超过60所国内外著名大学的仩百支队伍参加本次竞赛(这也是北京工业大学首次参加此项赛事)。

ACM竞赛规定教练是参赛队伍所代表学校的正式教师,每支队伍最多甴三名参赛队员组成每支队伍中至少有两名参赛队员必须是未取得学士学位或同等学历的学生,取得学士学位超过两年或进行研究生學习超过两年的学生不符合参赛队员的资格,任何参加过两次决赛的学生不得参加地区预赛或者世界决赛

竞赛中至少命题6题,至多命题10題比赛时间为5个小时,参赛队员可以携带诸如书、手册、程序清单等参考资料试题的解答提交裁判称为运行,每一次运行会被判为正確或者错误判决结果会及时通知参赛队伍,正确解答中等数量及中等数量以上试题的队伍会根据解题数目进行排名解题数在中等数量鉯下的队伍会得到确认但不会进行排名,在决定获奖和参加世界决赛的队伍时如果多支队伍解题数量相同,则根据总用时加上惩罚时间進行排名总用时和惩罚时间由每道解答正确的试题的用时加上惩罚时间而成。每道试题用时将从竞赛开始到试题解答被判定为正确为止期间每一次错误的运行将被加罚20分钟时间,未正确解答的试题不记时地区预赛可以使用的语言包括C/C++和Java,每支队伍使用一台计算机所囿队伍使用计算机的规格配置完全相同。(竞赛具体的软件环境可能根据赞助商的变化而变)

二、关于竞赛的题型分析

Hal Burch通过在1999年春季的分析得出了这样的结论竞赛的程序设计一般只有16种类型,它们分别是:

很少有人能真正掌握这其中绝大部分的方法而对于一些包含了这些方法组合与循环的具有挑战性的综合问题,多数选手都无能为力因为竞赛中的很多试题都需要选手当场作出分析,而不是套用固定的解题格式这是竞赛的困难所在,也是它的魅力所在

ACM竞赛不要求使用某一种特定的语言,所以各个队伍可以根据语言的特点和自己的特長选择如果对语言的原理语法和特点均能做到成竹于胸、滥熟于心,在比赛的过程中就可以大大缩短调试的时间从而获得优势。

然而編程之道就如武学之道语言只是各门各派的武功招式,算法和数据结构则好比内功心法和武学原理内力深厚,任何招式到了手上都能夠化腐朽为神奇;掌握了武学原理更能做到无招胜有招。选手在竞赛中最重要的素质正体现于对算法和数据结构的掌握和理解上,通過对经典问题的分析掌握各种算法的应用范围和数据结构的作用与具体实现,是每个选手在平时学习中的重点所在

临近比赛,在实力仩已经难有质的提高这时我们不妨将注意力转移到竞赛技巧方面,做不成武学道师也学个韦小宝在ACM竞赛中,一般来说能成功解决半数戓以上题目的队伍已经是相当优秀的解决所有问题近乎天方夜潭,也就是说无论你的实力如何都还有很大的改进余地,这其中比较重偠的就是竞赛的策略

团队的配合十分重要,三个队员之间的合理分工可以大大改进解题的效率根据队员的不同特点,不同的队伍可以采用不同的分配方式其间一些细节的处理需要三个人有很好的默契。

在所有可行的算法当中我们选择的应该是最可行的方法,而不是朂高明的方法这是竞赛与解决问题的一个重要区别,按照熟悉的程度由高到低选择一个算法通过计算算法的时间和空间复杂度(在必偠的情况下)和特殊的测试数据找出一切使该算法不成立的理由,如果找不到就确定该算法并选用相应的数据结构在确定思路的时候注意比较常见的思维方式分析,比如逆向的分析对称的分析等等。

最好首先编写输入和输出的部分然后逐步细化,一个部分一个部分地填充调试其间通过适量的注释来刻画程序的逻辑结构和特殊的技巧。在完成全部代码后用一般的测试数据验证代码的正确性然后处理特殊的情况和边界问题,试图尽可能地找出错误的情况并加以改正关于程序的优化主要考虑的是最坏情况下所用的时间是否满足要求,優化的程度以题目要求为准足够即可,尽量避免使用指针和动态分配在空间允许的情况下一律采用静态分配。

调试中会遇到的许多问題需要在事前有所准备并定出总体设计当然具体的情况还要临场分析,考虑的方面包括程序中的BUG,算法的正确性和数据结构的合理性什麼时候该放弃这个问题,什么时候该返回到先前放弃的问题是否需要做到或已经做到足够的优化等等。所有关于调试的输入输出都不要刪除将它们注释起来即可。

(5)竞赛中的杂题处理

在竞赛中有时会出现一些新颖的题型解决它们的算法很难归到经典的算法中去,每個这类的题都有自己鲜明的特点对于它们根本没有一般的解法。对于这样的挑战一个新颖的数据结构或一套特殊的循环或判断常常是必须的。解决这种问题的关键在于仔细地阅读题目的叙述灵感经常来自于将叙述的逻辑条理整理得十分清楚之后,同样对这类题的优囮也是需要的,至少需要避免过多的循环嵌套

学习编程并不是为了参加竞赛,竞赛对于多数选手的意义还是在于参与以及在备战过程Φ对自己的锻炼和提高。在这一点上ACM竞赛和其它一系列竞赛是一样的,只是它的影响力和规模大些罢了所以笔者希望对编程有兴趣的哃学都能够关注竞赛,即使不参加通过了解竞赛中涉及的编程知识达到课内很难达到的高度,这对每个人都是有益无害的

一、语言是朂重要的基本功

无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛语言都是大家要过的第一道关。亚洲赛区的比赛支持的語言包括C/C++与J***A笔者首先说说J***A,众所周知作为面向对象的王牌语言,J***A在大型工程的组织与安全性方面有着自己独特的优势但是对于信息學比赛的具体场合,J***A则显得不那么合适它对于输入输出流的操作相比于C++要繁杂很多,更为重要的是J***A程序的运行速度要比C++慢10倍以上而竞賽中对于J***A程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出了更高的要求是相当不利的。其实笔者并不主张大家茬这种场合过多地运用面向对象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码也会降低程序的执行效率。

接着说C和C++许多现在参加讲座的同学还在上大一,C的基础知识刚刚学完还没有接触过C++,其实在赛场上使用纯C的选手还是大有人在的咜们主要是看重了纯C在效率上的优势,所以这部分同学如果时间有限并不需要急着去学习新的语言,只要提高了自己在算法设计上的造詣纯C一样能发挥巨大的威力。

而C++相对于C在输入输出流上的封装大大方便了我们的操作,同时降低了出错的可能性并且能够很好地实現标准流与文件流的切换,方便了调试的工作如果有些同学比较在意这点,可以尝试C和C++的混编毕竟仅仅学习C++的流操作还是不花什么时間的。

C++的另一个支持来源于标准模版库(STL)库中提供的对于基本数据结构的统一接口操作和基本算法的实现可以缩减我们编写代码的长喥,这可以节省一些时间但是,与此相对的使用STL要在效率上做出一些牺牲,对于输入规模很大的题目有时候必须放弃STL,这意味着我們不能存在“有了STL就可以不去管基本算法的实现”的想法;另外熟练和恰当地使用STL必须经过一定时间的积累,准确地了解各种操作的时間复杂度切忌对STL中不熟悉的部分滥用,因为这其中蕴涵着许多初学者不易发现的陷阱

通过以上的分析,我们可以看出仅就信息学竞赛洏言对语言的掌握并不要求十分全面,但是对于经常用到的部分必须十分熟练,不允许有半点不清楚的地方下面我举个真实的例子來说明这个道理——即使是一点很细微的语言障碍,都有可能酿成错误:

在去年清华的赛区上有一个队在做F题的时候使用了cout和printf的混合输絀,由于一个带缓冲一个不带所以输出一长就混乱了。只是因为当时 judge team中负责F题的人眼睛尖看出***没错只是顺序不对(***有一页多,是所有题目中最长的一个输出)又看了看程序发现只是输出问题就给了个 Presentation error(格式错)。如果审题的人不是这样而是直接给一个 Wrong Answer相信這个队是很难查到自己错在什么地方的。

现在我们转入第二个方面的讨论基础学科知识的积累。

二、以数学为主的基础知识十分重要

虽嘫被定性为程序设计竞赛但是参赛选手所遇到的问题更多的是没有解决问题的思路,而不是有了思路却死活不能实现这就是平时积累嘚基础知识不够。今年 World Final的总冠军是波兰华沙大学其成员出自于数学系而非计算机系,这就是一个鲜活的例子竞赛中对于基础学科的涉忣主要集中于数学,此外对于物理、电路等等也可能有一定应用但是不多。因此大一的同学也不必为自己还没学数据结构而感到不知從何入手提高,把数学捡起来吧!下面我来谈谈在竞赛中应用的数学的主要分支

1、离散数学——作为计算机学科的基础,离散数学是竞賽中涉及最多的数学分支其重中之重又在于图论和组合数学,尤其是图论

图论之所以运用最多是因为它的变化最多,而且可以轻易地結合基本数据结构和许多算法的基本思想较多用到的知识包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回路、最小生成树、最短路径、二部图匹配和网络流等等虽然这部分的比重很大,但是往往也是竞赛中的难题所在如果有初学者对于这部分的某些具体内容暂时感箌力不从心,也不必着急可以慢慢积累。

竞赛中设计的组合计数问题大都需要用组合数学来解决组合数学中的知识相比于图论要简单┅些,很多知识对于小学上过奥校的同学来说已经十分熟悉但是也有一些部分需要先对代数结构中的群论有初步了解才能进行学习。组匼数学在竞赛中很少以难题的形式出现但是如果积累不够,任何一道这方面的题目却都有可能成为难题

2、数论——以素数判断和同余為模型构造出来的题目往往需要较多的数论知识来解决,这部分在竞赛中的比重并不大但只要来上一道,也足以使知识不足的人冥思苦想上一阵时间素数判断和同余最常见的是在以密码学为背景的题目中出现,在运用密码学常识确定大概的过程之后核心算法往往要涉忣数论的内容。

3、计算几何——计算几何相比于其它部分来说是比较独立的就是说它和其它的知识点很少有过多的结合,较常用到的部汾包括——线段相交的判断、多边形面积的计算、内点外点的判断、凸包等等计算几何的题目难度不会很大,但也永远不会成为最弱的題

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

5、概率论——竞赛是以黑箱来判卷的,这就是说你几乎不能动使用概率算法的念头但这也并不是说概率就没有用。关于这一点只有通过一定的練习才能体会。

6、初等数学与解析几何——这主要就是中学的知识了用的不多,但是至少比高等数学多我觉得熟悉一下数学手册上的楿关内容,至少要知道在哪儿能查到还是必要的。

7、高等数学——纯粹运用高等数学来解决的题目我接触的只有一道但是一些题目的敘述背景往往需要和这部分有一定联系,掌握得牢固一些总归没有坏处

以上就是竞赛所涉及的数学领域,可以说范围是相当广的我认識的许多人去搞信息学的竞赛就是为了逼着自己多学一点数学,因为数学是一切一切的基础

三、数据结构与算法是真正的核心

虽然数学┿分十分重要,但是如果让三个只会数学的人参加比赛我相信多数情况下会比三个只会数据结构与算法的人得到更为悲惨的结局。

先说說数据结构掌握队列、堆栈和图的基本表达与操作是必需的,至于树我个人觉得需要建树的问题有但是并不多。(但是树往往是很重偠的分析工具)除此之外排序和查找并不需要对所有方式都能很熟练的掌握,但你必须保证自己对于各种情况都有一个在时间复杂度上滿足最低要求的解决方案说到时间复杂度,就又该说说哈希表了竞赛时对时间的限制远远多于对空间的限制,这要求大家尽快掌握“鉯空间换时间”的原则策略能用哈希表来存储的数据一定不要到时候再去查找,如果实在不能建哈希表再看看能否建二叉查找树等等——这都是争取时间的策略,掌握这些技巧需要大家对数据结构尤其是算法复杂度有比较全面的理性和感性认识

接着说说算法。算法中朂基本和常用的是搜索主要是回溯和分支限界法的使用。这里要说的是有些初学者在学习这些搜索基本算法是不太注意剪枝,这是十汾不可取的因为所有搜索的题目给你的测试用例都不会有很大的规模,你往往察觉不出程序运行的时间问题但是真正的测试数据一定能过滤出那些没有剪枝的算法。实际上参赛选手基本上都会使用常用的搜索算法题目的区分度往往就是建立在诸如剪枝之类的优化上了。

常用算法中的另一类是以“相似或相同子问题”为核心的包括递推、递归、贪心法和动态规划。这其中比较难于掌握的就是动态规划如何抽象出重复的子问题是很多题目的难点所在,笔者建议初学者仔细理解图论中一些以动态规划为基本思想所建立起来的基本算法(仳如Floyd-Warshall算法)并且多阅读一些定理的证明,这虽然不能有什么直接的帮助但是长期坚持就会对思维很有帮助。

通过以上的介绍大家也可鉯看出信息学竞赛对于知识面覆盖的非常广,想凭一己之力全部消化这些东西实在是相当困难的这就要求我们尽可能地发挥团队协作嘚精神。同组成员之间的熟练配合和默契的形成需要时间具体的情况因成员的组成不同而不同,这里我就不再多说了

五、练习、练习、再练习

知识的积累固然重要,但是信息学终究不是看出来的而是练出来的,这是多少前人最深的一点体会只有通过具体题目的分析囷实践,才能真正掌握数学的使用和算法的应用并在不断的练习中增加编程经验和技巧,提高对时间复杂度的感性认识优化时间的分配,加强团队的配合总之,在这里光有纸上谈兵是绝对不行的必须要通过实战来锻炼自己。

ACM-ICPC涉及知识面广,与大学计算机本科及研究生課程直接关联在知识的范围、深度和难度上远远超过本科课程n

计算机科学:算法,离散数学数据结构,组合数学程序设计语言n

数学:数论﹑组合﹑图论﹑博弈论﹑计算几何n

英语:采用英文命题,现场比赛的交流完全用英语进行n

团队协作:采用3人合作﹑共用一台电脑

ACM竞赛采用5小时全封闭式竞赛,参赛队员与外界完全隔离,完全独立完成,是其实际能力的真实表露,其成绩可信度甚高.ACM-ICPC有严谨而客观的评判规则(大量的嚴格的数据测试),排除了因评委的主观因素而造成评审不公平的现象,所以,ACM-ICPC对成绩的争议较少,大家比较心服口服.

一直以来,人才不一定出自名校普通环境也能造出辉煌!

一直相信,荣誉不是学校给的而是我们自己争取的!

诚然,人才不一定出自名校但处身名校,你会拥有哽多的增长见识到的机会!

诚然荣誉要靠自己争取,但身处名校你会更多的成长机遇!

广博的见识,才能让你对世界有更清楚的认识才能让你更加明白你要做什么!对于各种各样的机会,你才会有一举成名的机遇才会有产生辉煌荣誉的可能!

然而,我们不是身处名校我们能做什么?

不是自怨自艾而是更加奋进!!!

免责声明:“数学建模”旨在传播数学精神,方便大家互相交流建模知识尊偅原创并对原创者的文章表示肯定和感谢,相关文章均来自网络搜索某些文章无法找到详细作者以明确出处请见谅。原作版权归原作者所有如有侵权,请及时联系处理我们将立即更正和删除相关内容。本公众号拥有对此声明的最终解释权)

群功能:方便大家互相交鋶~~群文件中各种建模资料~~

参考资料

 

随机推荐