挑战程序设计竞赛这本书怎么样,程序设计相关书籍
1什么是编程竞赛?本书所指的编程竞赛是一种解题竞赛,是指参赛选手运用自己的计算机相关知识,在有限的时间内解决几个较难的编程问题。这些问题一般都与某种算法有关,如果读者没有接受过相关培训,一般很难在有限的时间内解决。除了解题竞赛,还有很多其他类型的编程竞赛。比如以提高程序运行效率为目的的性能竞赛,以完成某个特定功能的软件为目的的创意竞赛等等。下面是一些有影响力的解题编程竞赛。
1.1 acm-ICPC acm国际大学生编程竞赛(ICPC)由计算机械协会(ACM)主办,是一项具有悠久历史的ACM国际大学生编程竞赛。其目的是让大学生充分展示运用计算机分析和解决问题的能力。
自1977年举办第一届世界总决赛以来,截至2020年1月,此项赛事已连续举办43届。这项比赛受到了国际著名大学的高度重视,也受到了世界各大IT公司的高度重视。一些公司(如IBM、甲骨文、惠普、微软等。)经常赞助比赛。
ACM-ICPC代表每所学校组队参赛,每队不超过3人。团队成员必须是在校学生,符合一定的年龄限制,每年最多可以参加两次地区选拔赛。比赛期间,每支队伍需要在5个小时内用一台计算机用C/C、Java、Python中的一种编写程序解决7 ~ 13个问题。程序完成后会提交给裁判进行运行,运行结果会被判断为正确或错误,并及时通知团队。最后的获胜者是拥有最多正确答案和最少总时间的团队。
与其他计算机程序竞赛相比,ACM-ICPC的特点是题量大,每支队伍需要在5小时内完成7道或7道以上的题。此外,一个团队有三名球员,但只有一台电脑,这使得时间更加紧张。所以,除了扎实的专业水平,良好的团队合作和心理素质也是成功的关键。
1.2 Google Code Jam(GCJ)Google Code Jam(谷歌全球编程挑战赛)是由谷歌举办的国际编程大赛,目标是为谷歌选拔顶尖的工程人才。
比赛的每个题目都是由谷歌工程师精心设计的,既有趣又有挑战性。玩家不仅可以检验自己的编程水平,还可以在比赛环境中快速提升自己的实践技能,丰富自己的履历。比赛始于2003年。竞赛内容包括在有限的时间内解决一系列具体的算法问题,编程语言和环境的选择不限。每年,经过四轮在线比赛后,将诞生25名参赛者,在谷歌不同办公地点举行的世界总决赛上争夺现金奖励和奖杯。
1.3 TopCoderTopCoder是一个面向平面设计师和程序员的网站。它通过比赛、评分和支付的方式吸引了许多平面设计师和程序员兼职。
网站每个月都有两到三场线上比赛,参赛者根据比赛成绩进行排名。参与者可以根据自己的兴趣爱好选择Java、C、C#、VB或Python进行编程。参与者必须在1小时15分钟内完成3道不同难度的题,每道题完成的时间决定了该题在编程部分的得分。比赛可分为编码阶段、挑战阶段和系统测试阶段三个部分,挑战阶段比ACM-ICPC多。这部分是让参赛者浏览同一个房间里分配的其他参赛者的源代码,然后试图找出错误,构造一组数据,使他们无法通过测试。如果选手的程序不能通过别人或系统的测试,选手在这个题目上的分数将为零。
1.4 CodeForcesCodeForces是一个提供在线评估系统的俄罗斯网站,由一群来自俄罗斯萨拉托夫州立大学的程序员创建和维护,Mike Mirzayanov是主要负责人。
CodeForces的每个用户在参加比赛后都会得到一个分数。根据分数和用户在历次比赛中的表现,系统会给用户一个不同头衔的评分,他们的名字会以不同的颜色显示。参与比赛的用户按照一定分数的评分分为Div1和Div2两类。因此,CodeForces上的竞争也将表明它是Div1、Div2还是两者。Div1的比赛难度大,Div2的比赛简单。如果同时进行,Div1的A、B、C题将与Div2的C、D、E题相同。每次比赛结束后,会根据每位选手之前的评分和公式重新计算评分。
在比赛中,参赛者有2个小时的时间来解决5个问题。这里的“解决某个问题”是指他们通过了预试,也就是通过了一个只有部分测试点的评价,而最终决定是否得到这个问题的分数,取决于比赛后的统一评价。一道题的分数随时间线性递减,但不会低于初始分数的30%。换句话说,玩家解决问题越快,他的分数就越高。而且参赛选手每次投稿都会扣除一定的分数。比如一道题的初始分数是1000分,每分钟题目分数递减4分。如果选手在10分钟内尝试提交三次,最后在第三次通过预试,每错一次提交扣50分,则该题得分为1000410250=860。
同一个Div的玩家会被分成几个房间,每个房间大概有20个玩家。在一个问题的预测试通过后,参赛者可以选择锁定该问题的代码。锁定代码后,参赛者将无法重新提交问题(即使代码包含错误)。之后,参赛者可以检查同一个房间的其他参赛者的代码,并试图找出漏洞。玩家可以构造一个测试(要么是数据,要么是数据生成器)让代码失败,这就是所谓的Hack(有时称为Challenge)。一次成功的黑客攻击可以得100分,如果不成功就要扣50分。最后,所有通过预测试的代码将被提交进行最终测试,玩家的最终分数是通过最终测试的代码分数和其他黑客获得(扣除)的分数。
CodeForces的题目倾向于考察解决问题的思路,一般涉及不太复杂的算法,标准代码一般都很短很精致。
1.5 IOI国际信息学奥林匹克竞赛(IOI)是一年一度的中学生信息学科竞赛。
这次比赛包括两天的计算机编程,以解决算法问题。每个国家最多可派出4名选手参加个人赛。参赛者是从各国相应的计算机竞赛中挑选出来的。国际信息学奥林匹克竞赛是智力和应用计算机解决问题的能力之间的竞赛。题挺难的,要很好的解决这类题需要很强的综合能力。第一,有观察和分析问题的能力;第二,有将实际问题转化为数学模型的能力;第三,具备灵活运用各种算法的能力;第四,有熟练编写程序并调试的能力;第五,具备根据题目要求独立设计测试数据的能力,检查自己的解决方案是否正确完整。能参加IOI的选手应该有很强的自学能力和动手能力。他们需要学习组合数学、图论、基本算法、数据结构、人工智能搜索算法和数学建模等方面的知识,学习高级语言和编程技能,具有较强的计算机操作能力。国际信息学奥林匹克竞赛鼓励创造性,倾斜评分标准,创造性的解题方法可以得高分。
2如何使用UVa OJ随着ACM-ICPC编程竞赛的普及,各种在线评委(OJ)网站和工具应运而生。巴利亚多利德大学在线法官(简称UVa OJ或UVa)历史悠久[1]。UVa OJ的特点是题目丰富,题型多样,比较适合中等水平的ACM-ICPC选手训练。
编程竞赛推荐书籍:1。编程竞赛训练营:算法与实践
本书是基于大学生编程竞赛的C高级培训指南,是为已经具备C1入门知识并想进一步学习的读者编写的。全书分为还湖法、地图、动态规划、网格等部分。回湖法部分介绍单向搜索和双向搜索,并给出高级搜索技巧;图分为图遍历和图算法。首先,介绍了图的遍历方法。然后以最小生成树问题、单源最短路径问题、多源最短路径问题和网络流问题的经典算法为例,介绍了十余种算法的原理和相关应用。在动态规划部分,我们逐一介绍了集合、区间、图论、概率、非典型动态规划,并介绍了空间和时间上的优化技巧,以及相应的备忘录和放松技巧。网格部分作为一个独立的题目,汇集了与网格相关的各种练习。
本书适合有兴趣参加大学生编程竞赛的本科生和研究生,对有兴趣参加信息学奥林匹克竞赛的中学生有参考价值。
章节安排本书既是训练指南,也是读书笔记。向Skiena和Revilla合著的《挑战编程:程序设计竞赛训练手册》这本书致敬(它激发了我对算法的兴趣,促使我写这本书,可以说是让我对编程竞赛产生兴趣的“启蒙老师”),这本书的章节名称参考了这本书的目录解构,但章节安排、叙述方式和具体内容已经“面目全非”。每章以“知识点”为单位进行介绍。基本上每个“知识点”都会有一个解题报告(题目来自UVa OJ),然后会列出若干题目作为强化练习或拓展练习。一般习题给出的问题,只有掌握目前介绍的知识点才能解决。一般来说,需要综合运用其他章节介绍的知识点,甚至自己去查询相关资料,了解、消化、吸收习题涉及的相关背景知识和算法,才能解决,难度相对较大。
本书除少数书名外,所有书名均选自UVa OJ,所以每个书名不加UVa以区分书名来源。为了方便练习选择,在问题的右上角用字母A ~ E来标识这个问题的“相对难度”。以2020年1月1日为截止日期,按照“明确接受用户(DACU)”进行评分:A(容易),DACU2000;b(部分),1999年DACU1000;c(中等难度),999DACU500;d(困难),499DACU100;e(困难),99DACU。建议难度等级为A ~ C的题全部完成,难度等级为D ~ E的题尽量完成(对于一些尝试次数较少的题,根据上述难度分级原则得出的难度值可能无法准确反映题的实际难度,因此本书做了适当调整)。如果一个问题DACU较少,原因有很多:或者问题涉及的算法不是很常见,有一定难度;或者输入陷阱太多,不容易打通;或者题目本身描述不够清晰导致阅读题目时产生歧义;或者题目描述过于冗长,愿意尝试的人少[2];或者在线评测系统不提供评测数据,导致无法对提交的代码进行评测[3]。不管是什么原因,你都应该努力解决这个问题。对于学习上有空余时间的读者来说,通过阅读文献,亲自实现算法,然后用练习来检验实现的代码的正确性,是一个很好的提高能力和素质的方法。
因为这本书包含了很多代码,为了尽可能减少篇幅,每个代码都省略了头文件和默认命名空间声明。
2.编程竞赛训练营:基础和数学概念
本书是ACM主办的ACM国际大学生编程竞赛的培训指南。主要介绍程序设计和竞赛训练需要的基础知识和基本数学概念,包括UVa OJ平台的使用,C的输入输出处理,C库实现包含的数据结构,高级数据结构,字符串处理及相关算法,排序和搜索算法,代数,组合数学,数论,几何等等。本书在介绍基本概念的基础上,引入了很多题目,用C解决问题,并给出了部分题目的参考代码,方便参考和练习。
本书适合有意参加acm国际大学生编程竞赛的本科生和研究生,对有意参加国际信息学奥林匹克竞赛的中学生有参考价值,也可作为计算机专业相关课程的参考教材。
章节安排本书既是训练指南,也是读书笔记。向Skiena和Revilla合著的《挑战编程:程序设计竞赛训练手册》这本书致敬(它激发了我对算法的兴趣,促使我写这本书,可以说是让我对编程竞赛产生兴趣的“启蒙老师”),这本书的章节名称参考了这本书的目录结构,但章节安排、叙述方式和具体内容已经“面目全非”。每章以“知识点”为单位进行介绍。基本上每个“知识点”都会有一个解题报告(题目来自UVa OJ),然后会列出若干题目作为强化练习或拓展练习。一般习题给出的问题,只有掌握目前介绍的知识点才能解决。一般来说,需要综合运用其他章节介绍的知识点,甚至自己去查询相关资料,了解、消化、吸收习题涉及的相关背景知识和算法,才能解决,难度相对较大。在第三章到第五章的最后一节,对解题中常用的一些算法库函数进行了简要的分析和举例说明。
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。