Ⅰ 如何在一年内ACM/ICPC从小白变world final 大神
如果想进World Final,光刷水题完全没有意义,水题数量限制在50-100个以内,熟悉下语言和题目。然后开始基础算法学,再学高级算法,最重要的是多参加比赛。
Ⅱ topcoder算法比赛,该怎么准备
topcoder中的牛人可以说是职业选手了,高中时NOI IOI,大学时ACM,秒杀基本的题型没有什么问题。
如果你在读书,可以参加学校的NOI IOI 或ACM,会得到很好的锻炼,现在也有很多ACM的练习网站。除了topcoder自己的竞技场,还可以去国内的acm站点做题:
acm.pku.e.cn 北大,每题有bbs讨论
acm.zju.e.cn 浙大
acm.scu.e.cn等等
topcoder中练习比较好的一个地方是你可以看到已完成比赛的代码,不过如果不理解算法,要看懂还是比较困难,可以多看几个人的,相互比较比较 呵呵
Ⅲ 参加ACM大赛应该准备哪些课程
课程:
(1)基本算法: 二分,分治,贪心
(2) 离散数学离散数学动态规划
(3) 搜索算法:深度优先 搜索,广度优先搜A*算法 ,阿尔法贝塔剪枝
(4)数据结构:线段树, 树状数组,并查集,Trie图
(5)图论问题:最小生成树 最短路 强连通分量、桥和割点
(6)网络流算法:基本的网络流算法,Dinic算法,带上下界的网络流,最小费用流
(7)计算几何:线与线求交,线与面求交,求凸包,半平面求交等
(8) 离散数学,高等数学,线性代数,初等数论,计算几何
(9)计算机专业英语
(10)C++;基础的递归、枚举算法
1.参赛队伍最多由三名参赛队员组成。
2.竞赛中命题10题左右,试题描述为英文,比赛时间为5个小时,前四个小时可以实时看到排名,最后一小时封榜,无法看到排名。
3.竞赛可以使用的语言:java, C, C++, Kotlin 和 Python。
4.重点考察选手的算法和程序设计能力,不考察实际工程中常用的系统编程,多线程编程等等;
5.选手可携带任何非电子类资料,包括书籍和打印出来的程序等,部分赛区会对选手携带的纸质资料做限制。
6.评委负责将结果(正确或出错的类型)通过网络尽快返回给选手,除此之外不提供任何额外帮助;
7.每个题目对应一种颜色的气球,通过该题目的队伍会得到对应颜色气球。每道题目第一支解决掉它的队还会额外获得一个“FIRST PROBLEM SOLVED”的气球。
Ⅳ 蓝桥杯全国软件大赛的赛程如何,参加蓝桥杯需要具备哪些条件
蓝桥杯是大学生IT学科赛事,由工业和信息化部人才交流中心主办。 为推动软件开发技术的发展,促进软件专业技术人才培养,向软件行业输送具有创新能力和实践能力的高端人才,提升高校毕业生的就业竞争力,全面推动行业发展及人才培养进程,工业和信息化部人才交流中心特举办“全国软件专业人才设计与创业大赛”,大赛包括个人赛和团队赛两个比赛项目,个人赛设置:1、C/C++程序设计(本科A组、本科B组、高职高专组)2、Java软件开发(本科A组、本科B组、高职高专组)3、嵌入式设计与开发(大学组、研究生组)4、单片机设计与开发(大学组)5、电子设计与开发(大学组),团队赛设置:软件创业赛一个科目组别。
1、组别
个人竞赛分为:c/c++本科A组,c/c++本科B组,c/c++高职高专组,java本科A组, java本科B组,java高职高专组,嵌入式设计与开发大学组,嵌入式设计与开发研究生组,单片机设计与开发本科组,单片机设计与开发高职高专组,电子设计与开发本科组,电子设计与开发高职高专组共12个组别。每位选手只能参加其中一个组别的竞赛。
2、时长
软件比赛:4小时,全程封闭。
电子类比赛:5小时,全程封闭。
3、形式
软件类:全程机考。
选手机器通过局域网连接到各个分赛区的竞赛服务器。
选手答题过程中无法访问互联网,也不允许使用本机以外的资源(如USB连接)
以“服务器-浏览器”方式发放试题、回收选手作答。
电子类:动手操作。
4、参赛选手机器环境
X86 兼容机器,内存不小于1G,硬盘不小于60G
Windows NT 内核系统(WindowsXP, Windows2000等)
c/c++ 开发环境:
Dev-cpp 5.4.0 支持ANSI C,ANSIC++,STL
c/c++ API 帮助文档(中文,chm格式)
Java 开发环境:
JDK 1.6
Eclipse Helios for JavaSE
API 帮助文档(中文,chm格式)
5、题目形式
软件类竞赛题目完全为客观题型,选手所提交作答的运行结果为主要评分依据。
(1)填空题
题目为若干具有一定难度梯度、分值不等的结果填空题或代码完善填空题。
结果填空题
题目描述一个具有确定解的问题。要求选手对问题的解填空。
不要求解题过程,不限制解题手段,只要求填写确定的结果。
代码填空题
题目描述一个具有确定解的问题。
题目同时给出该问题的某一解法的代码,但其中有缺失部分。
要求选手读懂代码逻辑,对其中的空缺部分补充代码,使整段代码完整。
只填写空缺部分,不要填写完整句子。
(2)编程题
题目为若干具有一定难度梯度、分值不等的编程题目。这些题目的要求明确、答案客观。
题目一般要用到标准输入和输出。
要求选手通过编程,对给定的标准输入求解,并通过标准输出,按题目要求的格式输出解。题目一般会给出示例数据。
一般题目的难度主要集中于对算法的设计和逻辑的组织上。理论上,选手不可能通过猜测或其它非编程的手段获得问题的解。
选手给出的解法应具有普遍性,不能只适用于题目的示例数据(当然,至少应该适用于题目的示例数据)。
为了测试选手给出解法的性能,评分时用的测试用例可能包含大数据量的压力测试用例,选手选择算法时要充分考虑可行性的问题。
6、涉及知识
Java高职高专组
解题所涉及的知识:基本语法、面向对象、网络编程、接口、集合、IO、多线程、内部类、异常。(数据结构、swing等图形界面不涉及,不涉及html、JSP、Tomcat、开源框架等web开发方面,不涉及JDBC、SQL等数据库编程方面)
解题允许使用的特性:JDK1.5支持的全部特性
Java本科B组
解题所涉及的知识:Java高职高专组全部知识 + 数据结构(高校《数据结构》教材中出现的经典结构,及其通过组合、变形、改良等方法创造出的变种)
解题允许使用的特性:同java高职高专组
Java本科A组
解题所涉及的知识:Java本科B组全部知识 + 设计模式,反射,XML,多核与并发,测试理论,Swing界面。
解题允许使用的特性:同java高职高专组
c/c++高职高专组
解题所涉及的知识:结构、数组、指针、标准输入输出、文件操作、递归
(在代码填空中不会出现c++知识,不会出现ANSI C之外的windows API调用)
解题允许使用的特性:选手可以使用c风格或c++风格或混合风格解答编程大题。
允许使用ANSI C++特性。允许使用STL类库。
(不允许使用MFC类库,ATL类库)
c/c++本科B组
解题所涉及的知识:c/c++高职高专组全部知识 + 数据结构、函数指针、位运算
解题允许使用的特性:同 c/c++高职高专组
c/c++本科A组
解题所涉及的知识:c/c++本科B组全部知识 + 函数模板、复杂宏、汇编知识
解题允许使用的特性:同 c/c++高职高专组
单片机设计与开发(本科组,高职高专组)
模拟、数字电路,传感器及MCS51系列单片机的相关知识,常用仪器使用方面的知识,程序编译调试和下载软件使用方面的知识。
嵌入式设计与开发(大学组)
模拟电路,数字电路,传感及STM32F103 MCU的相关知识,常用仪器使用方面的知识,Keil MDK4.10软件方面的知识。
电子设计与开发(本科组,高职高专组)
模拟电路,数字电路,传感器及电力电子等相关方面的相关知识及应用,电子元器件知识及应用,常用仪器仪表使用方面的知识。
7、评分
软件类
填空题:答案唯一。
程序填空题:按选手填写的代码代入程序中能否得出正确结果为判据。
编程大题:主要以选手所提交的程序的运行结果为依据(大于90%);同时会参考选手程序的编码风格、逻辑性、可读性等方面(小于10%)。
单片机和嵌入式类
硬件设计约占25%,软件编程及调试约占60%,其他约占15%。
电子设计类
硬件设计约占45%,装调约占35%,其他约占20%。
8、注意事项
(1)选手必须符合参赛资格,不得弄虚作假。资格审查中一旦发现问题,则取消其报名资格;竞赛过程中发现问题,则取消竞赛资格;竞赛后发现问题,则取消竞赛成绩,收回获奖证书及奖品等,并在大赛官网上公示。
(2)参赛选手应遵守竞赛规则,遵守赛场纪律,服从大赛组委会的指挥和安排,爱护竞赛赛场地的设备。没有其固定的门槛可以直接进行管网的报名。
Ⅳ 做程序员必须要搞ACM ICPC吗
显然不是必须的。在大学阶段成为人生赢家的道路有很多,ACM在其中恐怕还算比较曲折的一条。然而程序员是否必须参加ACM这个问题,和题主是否有必要参加ACM似乎也毫无关联。接下来谈谈实际问题:小马过河,是该蛙泳还是狗刨。很多ACM相关的吐槽诸位都应该听多了:大量重风格糟糕的编码练习,在某些算法细节的实现上过于别扭的纠结,各种在现实应用中并无卵用的神棍算法大行其道。。。。。比如这篇算法竞赛总结里的吐槽(Overview of Programming Contests)(各种程序设计比赛总结得很完善,推荐各位看看)诚然,从成为一名优秀的技术人员的角度来说,在各种古典算法的骨架上,玩上几年披着程式设计外衣的思维游戏,想必不会是捷径。然而,我对ACM的理解是,它真正牛逼的地方,不在于从中学了多少算法,做了多少题。而是厉害在生态系统的完备上。这里的生态系统是指由以ICPC为首的诸多算法竞赛赛事,和校内集训队构成的整体环境。首先,私以为,对个人成长来说,反馈才是核心。而算法竞赛的一大特点恰恰是高反馈。从每个提交返回的AC,WA,TLE,到topcoder,codeforces等大型线上赛网站的elo rating系统,各种各样商业公司组织的算法比赛,以及ICPC赛事本身积淀至今的仪式感构成了ICPC完整的反馈体系。高反馈给予了算法竞赛选手高动力。君不见,诸多竞赛选手一年里的很多个晚上为了能够做场线上赛,冒着被室友杀身之险,在断了电的宿舍里,摸黑战斗到凌晨两三点(主要是时差问题), 并且还能乐在其中。像轮子哥一般自少年时期便执着于代码的杰出技术青年着实不多,然而能在炎炎夏日连续两个月,每天坚持训练十个小时以上,整个算法竞赛生涯倾注数千小时于coding之上的ACMer却比比皆是。
Ⅵ 如何用一串代码成为kpl职业选手
一串代码成为职业选手是不可能的。
如果想获得王者荣耀最佳战绩,可以考虑用人工智能算法来训练你的机器人,帮你打比赛。
但是要成为职业选手,那是你自己个人的事,需要你苦练技术,而且需要你的大脑和手速都跟得上,这个就不是用代码能解决的问题了。
成为KPl职业选手的方法:
首先你要在游戏当中打上百星荣耀王者,巅峰赛2000分,你才有可能获得青训试训的资格,然后进入青训营。
你必须要在一群国服大佬当中出类拔萃,要开瑞全场光芒四射,你才有可能被俱乐部买走。
接着,你在二队打训练赛,如果你表现突出才能成为一队的替补,再到一队,有人退役或者状态不行的时候,你才有机会在不太重要的比赛临时上场一次。
如果这次登场表现得好,那么你就继续留下来打比赛,表现不好,你很有可能被永久雪藏。
年龄要求:
一般中国电竞打职业的话是年满16周岁,同时电竞职业选手,最好是18-24岁之间,这个年龄段时期人的反应较其他时期迅速,电竞职业选手大多在25岁左右会退役。
Ⅶ 如何参加ACM/ICPC
ACM/ICPC采用组队参赛的形式,由三名队员组成一支队伍参赛。比赛时三名队员只使用一台电脑,整个比赛时间为5个小时。 比赛题目为6~10道不等,全英文。 比赛是只能携带纸质材料。 标准的程序数据输入和输出解答要求。选手们必须根据题目内容设计算法,并完成相应的功能要求。该队程序如果能在规定时间内得出正确的答案视为通过。 队伍通过的题目数量多的在比赛中排名越高,题目数相同的则用时越少的排名越高。 该项竞赛分区域预赛和国际决赛两个阶段进行。各预赛区前几名自动获得参加世界决赛的资格,世界决赛安排在每年的3~4月举行,而区域预赛安排在上一年的9~12月在各大洲举行。 你要先进学校校队才有可能参加
Ⅷ 学珠心算的方法
请参考:一、确定科学的教学与训练途径
教学与训练的途径决定着教学与训练的基本模式。在教学与训练中只有客观地遵循教学原则,根据教学对象、培养目标及珠心算本身的特点,确定科学、高效的教学与训练途径,才能实现珠心算教学与训练质量的最优化。珠心算教学与训练途径主要有两条:一是课外兴趣小组提高型;二是课堂教学班普及型。后者又可分为课外与课内两种。以兴趣小组形式进行的提高型,由于参加的儿童一般从一个或几个年龄相当的班中挑选出来的各方面素质较好的儿童,所以教师要采取熟练珠算,逐步过渡到珠心算的思路进行教学。从加强珠算的基本功(即记数、拨珠、写数等)和珠算加减法训练着手,待加减算能算10笔两、三位数时,再引入珠心算。这样基本功扎实,进度快,有利于培养心算尖子,参与竞技。
对于全班进行的普及型,特别是进入数学课堂教学的,最好走珠算与珠心算基本同步的路子,即从认识数开始逐步渗透珠心算的思想。
二、安排适当的教学与训练时间
珠心算的教学要求教师精讲,儿童多练,才能实现珠算向珠心算的转化。多练也并不是无限制花大量的时间练,必须有一个“度”。 每次训练时间长了大脑容易疲劳。许多教育家和心理学家指出,任何一种过于长久和单调的活动,对儿童都是极其有害的。儿童正是长身体、长知识的时期,如果教师一味地追求对儿童珠心算的训练,而忽视了对他们其它方面的能力培养和应有知识的掌握,那么这样的教学是不成功的。同时,在教学中教师也应考虑到儿童的注意不稳定性及人的记忆与遗忘的规律性等因素。因此,在珠心算的教学与训练中,除了每次课间要安排些休息,最好让儿童到室外做些全身运动,以保持大脑清醒,调节精神和视力外,建议珠心算的普及型教学每周最好分散活动2—3次,每次30—40分钟;提高型每周最好安排课余活动5—6次,每次1至1个半小时,这样既能提高训练效率,又能使学习珠心算的儿童有时间参加一些其他活动,使他们德、智、体全面发展。
三、选择合适的计算方法
计算方法是提高珠心算教学与训练质量的一个重要因素。我们知道每个儿童在接受、理解、记忆等能力方面存在着差异,如果只考虑算法的先进性,而忽视了儿童的接受能力等,那么势必影响教学与训练的效果。反之亦然。同时珠心算教学要求与目标不同,所以在计算方法的选择上有所区别。
四、有效地指导教学与训练
如何用最少的时间,花最小的精力创造最佳的教学与训练效果,是教学工作者所期待的。在教学训练中除了采取些趣味练习,讲故事、开火车、比一比等形式,激发儿童学珠心算兴趣,调动儿童积极性外,还需要根据培养目标和珠心算学科的特点,把握珠心算教学的方向,才能取得事半功倍的教学与训练效果。
1.要处理好“准”与“快”的关系
准与快的关系是数量与质量的关系。培养一般的珠心算儿童(普及型),则强调准,准中求快,即先有质量后有数量;培养珠心算选手(提高型),则要求快,快中求准。
2.要重视听的训练
听是珠心算和珠算教学与训练中的一种形式,也是教学中不可缺少的一个环节。从珠心算教学效果看,无论是珠算还是珠心算,听是看的基础,一般先听后看,再听、看交替较为理想。
3.加强珠算操作
从珠心算的形成过程中可以看出,珠心算来源于珠算,是珠算的最高形式。如果教练忽视了珠算的训练,那么珠心算将成为“无源之水,无本之木”,珠心算的水平就无法再提高。
Ⅸ 我要达到怎样的水平才能去参加acm编程比赛
算法,数据结构是关键,另外还有组合数学,特别是集合与图论,概率论也重要。推荐买一本《算法导论》,那本书行,看起来超爽!!!基本掌握语法还不行啊,语法的超熟练掌握,不然出了错误很难调试的!!!最重要的是超牛皮的头脑啦,分析能力,逻辑推理能力很重要。ACM很好玩啦,祝你成功!!!
acm是3人一组的,以学校为单位报名的,也就是说要得到学校同意,还要有2个一起搞的。其实可能是你不知道你们学校搞acm的地方,建议你好好询问下你们学校管科技创新方面的人。建议你找几个兴趣相同的一起做,互相探讨效果好多了,团队合作也是acm要求的3大能力之一。
数据结构远远不够的,建议你看算法导论,黑书,oj的话个人觉得还是poj好,有水题有好题,而且做的人多,要解题报告什么的也好找。我们就是一些做acm的学生一起搞,也没老师,这样肯定能行的。
基础的话是语言,然后数据结构,然后算法。
ACM有三个方向:算法,数学,实现
要求三种能力:英文,自学,团队协作
简单的说,你要能读懂英文的题意描述,要有一门acm能使用的编程语言,要会数据结构,有一点数学基础,一点编程方面天赋,要有兴趣和毅力(最重要),就具有做ACM的基本条件了。
做acm我推荐c,c++也可以,java在某些情况下好用,但是大多数情况的效率和代码量都不大好,所以建议主用c++,有些题目用java
还有什么问题,可以问我啊。
不好意思,没见过用java描述的acm书籍,大多数是用伪命令,其他有的用的c,c++,老一些的用pascal。java只是用来做高精度的一些题的,个人觉得不用专门看这方面的书,java的基本部分学好就够用了。所以我还是推荐主用c++,在高精度和个别题再用java。你可以找找java描述的算法设计与分析,这个好像有
数据结构:C语言版 清华大学出版社 严蔚敏 《数据结构》
算法:清华大学出版社 王晓东 《算法设计与分析》
麻省理工大学 中译本:机械工业出版社 《算法导论》
基本上这三本书就已经足够了,建议一般水平的人先不要看算法导论,待另外两本书看的差不多的时候,再看算法导论加深理解。
另外还有很多针对性更强的书籍,不过针对性太强,这里就不多介绍了。
以上一些都是些算法方面的书,最好的方式就是做题与看书相结合,很多在线做题的网站,PKU,ZOJ很多,推荐PKU,题目比较多,参与的人比较多。做一段时间的题,然后看书,研究算法,再做题,这样进步比较快。
还有关于ACM竞赛,我有自己的一点话说。
首先说下ACM/ICPC是个团队项目,最后的参赛名额是按照学校为单位的,所以找到志同道合的队友和学校的支持是很重要的。
刚刚接触信息学领域的同学往往存在很多困惑,不知道从何入手学习,在这篇文章里,我希望能将自己不多的经验与大家分享,希望对各位有所帮助。
一、语言是最重要的基本功
无论侧重于什么方面,只要是通过计算机程序去最终实现的竞赛,语言都是大家要过的第一道关。亚洲赛区的比赛支持的语言包括C/C++与JAVA。笔者首先说说JAVA,众所周知,作为面向对象的王牌语言,JAVA在大型工程的组织与安全性方面有着自己独特的优势,但是对于信息学比赛的具体场合,JAVA则显得不那么合适,它对于输入输出流的操作相比于C++要繁杂很多,更为重要的是JAVA程序的运行速度要比C++慢10倍以上,而竞赛中对于JAVA程序的运行时限却往往得不到同等比例的放宽,这无疑对算法设计提出了更高的要求,是相当不利的。其实,笔者并不主张大家在这种场合过多地运用面向对象的程序设计思维,因为对于小程序来说这不旦需要花费更多的时间去编写代码,也会降低程序的执行效率。
接着说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算法),并且多阅读一些定理的证明,这虽然不能有什么直接的帮助,但是长期坚持就会对思维很有帮助。
四、团队配合
通过以上的介绍大家也可以看出,信息学竞赛对于知识面覆盖的非常广,想凭一己之力全部消化这些东西实在是相当困难的,这就要求我们尽可能地发挥团队协作的精神。同组成员之间的熟练配合和默契的形成需要时间,具体的情况因成员的组成不同而不同,这里我就不再多说了。
五、练习、练习、再练习
知识的积累固然重要,但是信息学终究不是看出来的,而是练出来的,这是多少前人最深的一点体会,只有通过具体题目的分析和实践,才能真正掌握数学的使用和算法的应用,并在不断的练习中增加编程经验和技巧,提高对时间复杂度的感性认识,优化时间的分配,加强团队的配合。总之,在这里光有纸上谈兵是绝对不行的,必须要通过实战来锻炼自己。
大家一定要问,我们去哪里找题做,又如何检验程序是否正确呢?这大可不必担心,现在已经有了很多网上做题的站点,这些站点提供了大量的题库并支持在线判卷,你只需要把程序源码提交上去,马上就可以知道自己的程序是否正确,运行所使用的时间以及消耗的内存等等状况。下面我给大家推荐几个站点,笔者不建议大家在所有这些站点上做题,选择一个就可以了,因为每个站点的题都有一定的难易比例,系统地做一套题库可以使你对各种难度、各种类型的题都有所认识。
1、Ural:
Ural是中国学生对俄罗斯的Ural州立大学的简称 ,那里设立了一个Ural Online Problem Set,并且支持Online Judge。Ural的不少题目算法性和趣闻性都很强,得到了国内广大学生的厚爱。根据“信息学初学者之家”网站的统计,Ural的题目类型大概呈如下的分布:
题型
搜索
动态规划
贪心
构造
图论
计算几何
纯数学问题
数据结构
其它
所占比例
约10%
约15%
约5%
约5%
约10%
约5%
约20%
约5%
约25%
这和实际比赛中的题型分布也是大体相当的。有兴趣的朋友可以去看看。
2、UVA:
UVA代表西班牙Valladolid大学(University de Valladolid)。该大学有一个那里设立了一个PROBLEM SET ARCHIVE with ONLINE JUDGE ,并且支持ONLINE JUDGE,形式和Ural大学的题库类似。不过和Ural不同的是,UVA题目多的多,而且比较杂,而且有些题目的测试数据比较刁钻。这使得刚到那里做题的朋友往往感觉到无所适从,要么难以找到合适的题目,要么Wrong Answer了很多次以后仍然不知道错在那里。 如果说做Ural题目主要是为了训练算法,那么UVA题目可以训练全方位的基本功和一些必要的编程素质。UVA和许多世界知名大学联合办有同步网上比赛,因此那里强人无数,不过你先要使自己具有听懂他们在说什么的素质:)
3、ZOJ:
ZOJ是浙江大学建立的ONLINE JUDGE,是中国大学建立的第一个同类站点,也是最好和人气最高的一个,笔者和许多班里的同学就是在这里练习。ZOJ虽然也定位为一个英文网站,但是这里的中国学生比较多,因此让人觉得很亲切。这里目前有500多道题目,难易分配适中,且涵盖了各大洲的题目类型并配有索引,除此之外,ZOJ的JUDGE系统是几个网站中表现得比较好的一个,很少出现Wrong Answer和Presentation error混淆的情况。这里每月也办有一次网上比赛,只要是注册的用户都可以参加。
说起中国的ONLINE JUDGE,去年才开始参加ACM竞赛的北京大学现在也建立了自己的提交系统;而我们学校也是去年开始参加比赛,现在也有可能推出自己的提交系统,如果能够做成,到时候大家就可以去上面做题了。同类网站的飞速发展标志着有越来越多的同学有兴趣进入信息学的领域探索,这是一件好事,同时也意味着更激烈的竞争。
Ⅹ 《算法竞赛入门经典训练指南》pdf下载在线阅读全文,求百度网盘云资源
《算法竞赛入门经典 训练指南 升级版》(刘汝佳)电子书网盘下载免费在线阅读
链接: https://pan..com/s/11qzCfpPngSnomOF1Rl5XKA
书名:算法竞赛入门经典 训练指南 升级版
作者:刘汝佳
出版社:清华大学出版社
出版年份:2021-5-1
内容简介:
《算法竞赛入门经典——训练指南(升级版)》是《算法竞赛入门经典(第2版)》一书的重要补充,旨在补充原书中没有涉及或者讲解得不够详细的内容,从而构建一个更完整的知识体系。本书通过大量有针对性的题目,让抽象复杂的算法和数学具体化、实用化。
《算法竞赛入门经典——训练指南(升级版)》共包括6章,分别为算法设计基础、数学基础、实用数据结构、几何问题、图论算法与模型以及更多算法专题。全书通过206道例题深入浅出地介绍了上述领域的各个知识点、经典思维方式以及程序实现的常见方法和技巧,并在章末给出了丰富的分类习题,供读者查漏补缺和强化学习效果。
《算法竞赛入门经典——训练指南(升级版)》题目多选自近年来ACM/ICPC区域赛和总决赛真题,内容全面,信息量大,覆盖了常见算法竞赛中的大多数细分知识点。书中还给出了所有重要的经典算法的完整程序,以及重要例题的核心代码,既适合选手自学,也方便院校和培训机构组织学生学习和训练。
作者简介:
刘汝佳,2000年3月获得NOI2000全国青少年信息学奥林匹克竞赛一等奖。大一时获2001年ACM/ICPC国际大学生程序设计竞赛亚洲-上海赛区冠军和2002年世界总决赛银牌。2004年至今共为 ACM/ICPC亚洲赛区命题二十余道,担任6次裁判和2次命题总监,并应邀参加IOI和ACM/ICPC相关国际研讨会。曾出版《算法竞赛入门经典》《算法竞赛入门经典——训练指南》《编程挑战》等畅销书。
陈锋,任职于厦门宇道信隆信息科技有限公司,担任技术总监职务,专注于人工智能以及算法技术在金融科技领域的应用。同时担任四川大学ACM/ICPC算法竞赛集训队特邀指导老师,榕阳编程NOI、NOIP指导教练。所带学员多次获得ICPC金/银牌,进入NOI省队等。曾出版《算法竞赛入门经典——训练指南》《算法竞赛入门经典——习题与解答》《算法竞赛入门经典——算法实现》等畅销书。