如何利用寒假的时间来准备 2020 年的蓝桥杯?
全文大概 3000 字,首先简单介绍了蓝桥杯竞赛的相关规则,然后详细描述了每个等级的路该怎么走。
至于蓝桥杯到底有没有用,仁者见仁,智者见智。
指示牌上写好了路的方向,走不走,值不值得走,怎么走,都在于自己。
基本介绍
蓝桥杯按照院校和题目难度分有 A、B、C 三类;按照语言划分有 C/C++、Java 两类。
其中参赛 B 类的人数最多(B 类参赛资格是非985/211的本科或者专科),语言方面 C/C++ 参赛最多。
除了上面难度级别以及语言分类之外,对于蓝桥杯我们还应该了解,其分为省赛和国赛。
省赛是每年三月末到四月初,国赛在五月末。
晋级国赛的资格是省赛取得省一等奖。
省赛成绩在自己语言组别省份中排名前 10% 便可以获得一等奖。(二等奖 20%,三等奖30%,也就是前 60% 就有奖)
不管是 A 类还是 B 类,省级二等奖和三等奖基本上是没有什么含金量的。
省一等奖含金量也并不高。
A 类至少国三,B 类国二,才有一定含金量。
所以,千万不要认为自己拿了一个省二就很不错了。(大一的话还可以,比较有潜力)
经验
基本介绍完了,接下来介绍下如何取得省一等奖和国三以上吧。
做到以下三点,一切足以。
掌握竞赛涉及的语言的基本语法,学习和熟悉竞赛中常用的一些函数(API),无需背,比赛提供 API 文档。
至少看一本算法入门书籍(重点推荐《算法竞赛入门经典(第二版)》和《挑战程序设计竞赛》),不要求书中算法全部掌握,但要求对基础算法以及算法竞赛有个认识,知道算法竞赛是什么,为什么要参加,能收获什么,又该如何去入门与进阶。
刷题,刷题,刷题。找一个适合的 OJ 平台,针对性刷题,刻意训练。对于能否取得好成绩,这是最重要的一部分,没有这部分,就算比别人看的基础算法书多几本,也很难取得比别人更好的成绩。
注意:刷题固然重要,但是一定要刻意练习,刻意刷题!而不是盲目刷题。
在刷题之前,一定要先看书籍,清楚明白自己为什么要刷这些题目,这些题目刷完能学到收获什么,对于自己整个算法知识体系的建设起到了什么作用。
多总结,刷完题最好是把思路和答案分类整理起来,以后遇到同类题型的时候,进行对比和分析。
一、C/C++ 组别
第一阶段,省二到省一水平(基础较差开始)
1、学习 C 语言的基本语法(指针用得较少,文件基本上不会使用)
2、买一本竞赛算法书籍,入门算法竞赛。推荐《算法竞赛入门经典(第二版)》。
前四章是 C 语言基础语法和算法竞赛知识入门(程序设计入门、循环结构程序设计、数组与字符串、函数和递归)。
配合一些优质网上博客进行学习,看完《算法竞赛入门经典(第二版)》这四章差不多就知道算法竞赛是什么了,能够解决最基础的一些算法题。
这阶段会了解到 OJ 网址是什么,怎么去 OJ 网址刷题。在网上可以找一些比较好的 OJ 网址刷题入门指南,做一些基础题的练习,50-70 道差不多。(推荐在 Hdu OJ 的第2000-2099中选择)
3、接着学习《算法竞赛入门经典(第二版)》的第 5 章(C++ 语言入门),这一章稍微看一下,了解怎么将 C 语言写的代码改为 C++ 语言,另外重点了解 C++ 的 STL 中封装的一些算法,比如排序相关算法、比较相关算法、交换算法、二分算法、排列生成器算法等,STL 库中封装了这些算法,并且实现的性能大多数情况下比这阶段自己写的更好。
在后面的章节中,会学到这些算法的思想和如何实现。尽管有了 STL 库,也一定要学这些算法的思想和实现。不管是蓝桥杯还是工作面试,手写这些算法以及他们的变种都被考过无数次。
这阶段,可以找 5-10 道简单题练手(时间充足的话可以多一些)。
4、接着开始学习第 7 章和第 8 章。
第 7 章主要涉及到的内容:最基础的暴力枚举,排列组合算法,回溯法,深度搜索算法,广度搜索算法。
第 8 章主要涉及到的内容:算法效率分析(时间复杂度,空间复杂度。竞赛中每道算法题都是有时间和空间限制的),分治算法(二分法),排序和检索(上面提到过 C++ STL 库中封装过排序和检索算法,学习的时候要举一反三,结合起来一起分析运用),贪心算法思想和题型入门(很重要的算法之一,入门简单,进阶很难。这阶段涉及到了“区间相关题型”,“部分背包题型”,“哈夫曼压缩编码思想”。网络寻址中的最小生成树就是运用的贪心算法思想)。
学到这一步的暴力枚举、排列生成,并且刻意训练的总刷题量超过 120 道,不管哪个省,正常发挥,基本上是省二以及以上。
同时,做题要注意正确率,要是竞赛的时候会做但不小心做错,很多情况下题目就是0分,说不定明明是省一省二水平,却省三都没有拿到。
这例子非常多,也非常重要。谨记。明年成绩出来后,一定会有一大片人惊讶,为什么我感觉自己省一,却省三或者根本没有拿到奖。
第二阶段,稳定省一到国二级别(A组到国三级别)
1、完成第一阶段所有步骤后,继续学习第 7 章和第 8 章的其余算法,每种算法类型对应训练 8-15 道题目,难度逐渐递增,并且举一反三,多总结,尝试对每种算法类型题型找到自己的解题方法论。
同时可以配合多本算法书籍一起看,比如贪心算法,可以同时看下《算法导论》的贪心算法那一章,排序、检索其他等算法同理。
刷题的总结过程中,可以配合网上优质博客分析更多的思路、优秀的代码习惯以及解题技巧,同时可以尝试学习模仿下,让其解题技巧成为自己解题技巧一部分,更高效稳定地刷题。
2、这阶段完成之后,可以看下第 9 章的动态规划,这是基础算法里面最难的算法之一。先稍微入门一下,学会动态规划的几种基本题型,比如“背包”系列题型、最长上升子序列、最长公共子序列等最xxx子序列题型和它们简单的变种。
然后看一下第 10 章的数论,这部分不难,但是很重要。
3、完成了上面的步骤后,差不多可以开始学习第 6 章的数据结构了(大一应该都安排了《数据结构与算法》这门课,这是非常重要的一门课),同时要学习好《数据结构与算法》这门课,掌握各类数据结构的思想原理实现方式。
可以到中国大学 MOOC 网、B 站等学习网址学习这门课。
这里推荐两门课:浙江大学陈越老师带领讲的《数据结构与算法》,北京大学郭炜老师讲 的《算法基础》系列课程。
前者是《数据结构与算法》相关,后者是简单的算法相关。
这阶段除了学习第 6 章数据结构外,还要学习下 C++ 的一些其他操作了(算法竞赛相关的),比如 STL 中的 vector、set、map 以及结构体和大整数等,这些内容在第 5 章。
这一阶段,除了非常特殊的情况,基本上是用 C++ 解题。
4、再往后, 第 11 章主要讲的是图论进阶,里面也会结合一些动态规划、贪心算法(他们本身就密切相关)。
同样,该阶段每一种算法题型都对应刷题 8-15 道。
然后多找比赛参加,比如牛客网、CF(codeforce)等,该阶段在 CF 上再刷几个月应该可以达到 1400-1700 分左右。
大家加油:)
推荐阅读
牛逼!一行代码居然能解决这么多曾经困扰我半天的算法题
普普通通,我的三年大学
2020 第一篇原创 | 我是如何让自己变的更加优秀的?