大家好,今天这篇文章是 编程导航知识星球的一位优秀球友学习算法以及准备蓝桥杯(已拿国奖)的经验分享:
相信很多球友都报名了明年的蓝桥杯,作为之前混过一次蓝桥国奖的算法小白😁,分享一下学习经验,acmer 和 oier 可以直接划过。针对很多仅仅学过学校 c 语言或者数据结构(只会概念,不会敲代码)的同学,应该怎么从算法零基础 => 算法小白?
首先说一个很多人都有的误区,仅仅学过 c 语言或 py,java 等这些语言的基础语法,是否要买一本数据结构,从数据结构开始学,如果时间充裕可以,但不推荐,因为这样效果很慢,而且最关键的一点是
理论 =》 有思路,写出代码 =》 debug 并提交正确
每一步都有很大的跨越,所以,是否了解指针实现二叉树,红黑树.... 这些概念和写对算法题的意义不大。正如 yxc 直播间的某架构师所言:算法不是理论,写几行代码看看
那么,有些同学好奇,不会使用 vector,queue,hashmap, set 等等这些 stl,甚至没有听说过这些名词,应该怎么学习 stl?
个人建议是通过一些语法题和博客来学习使用这些 stl,把这些 stl 熟悉到会写头文件这种熟练程度。出现频率较高的有序表,栈和队列,哈希表,哈希集合,优先队列,字符串,可以照着一些博客写的 stl 进行练习,一般学一个容器,需要关注的几个重点:元素的增删改查,获取容器大小,遍历;把这些用法搞懂,就可以找一些相关题目进行联系了。
没有任何收费推广成分,单纯推荐。
怎么学习算法来提升代码能力?
两种方案:
①速成方案(付费): 买acwing算法基础课(149) + 蓝桥辅导课 (日常优惠价格199)/ 牛客雨巨讲的算法入门也不错(难度介于基础课到提高课之间,150),准备国赛的话,可以考虑尽早刷提高课;(不推荐看盗版,因为只看视频,不写题等于没学)
②稳定方案(平民): 自学,效率较慢但如果每道题目都是经过大脑认真推敲思考再豁然开朗,比第一种方案更好,题目驱动学习: 去洛谷官方题单(题单列表 - 洛谷),每个题单刷80%以上,和牛客入门题单(【新手上路】语法入门&算法入门题单_ACM竞赛_ACM/CSP/ICPC/CCPC/比赛经验/题解/...),每个题单50%就差不多熟练了,怎么学习一道题,首先看看自己能不能做出来,思考时间留 30 分钟以内,如果做出来,看看题解上其他人的解法,看懂之后,理解思路后能默写下来,不要照抄或者 cv,或没有做出来,且看不懂其他人的解法,这时候需要的是复制题目名称,用搜索引擎搜一下这个题目,推荐 bing 或 google 搜索,找到一篇合适的博客,直到学会为止。
哪些算法模块需要重点学习:
对于b组
- 省三:会模拟能写出蓝桥真题的前4道题
- 省二:自定义排序, 深,广度优先搜索,一些基础模板(前缀和,差分,二分,最短路,最小生成树,质数,约数等)
- 省一:简单的动态规划模型及其拓展(数字三角形模型,最长上升子序列模型,背包模型,状态机模型)
- 国优:不爆零
- 国三:熟悉一些复杂的模板题(比如线段树模板,并查集,树状数组,数论...)
- 国二:中等难度的动态规划模型及其拓展(状态压缩 DP,区间 DP,树形 DP,数位 DP,单调队列优化的 DP 问题,斜率优化的 DP 问题) + 复杂数据结构的简单使用
- 国一:思维能力 + 复杂数据结构的进阶使用 + 一些复杂模板
一句话总结,蓝桥杯又称 dp 杯,熟练动态规划者得国一..
最重要的部分,每周模拟实战,练习:
codeforces(英文,质量高且最流行)
atcoder(英文,出题水平高偏锻炼思维)
牛客寒假算法基础集训营(付费,题目很新,适合学习阶段花时间补题目深入研究)
牛客上的各种比赛(小白赛,高校练习赛等)
leetcode 周赛和双周赛(题目难度不确定)
acwing周赛
作息不规律的同学可以看看 codeforces 的 div2,div3,div4,免费,且题目质量是这些比赛里面比较高的,一般时间是22:35 - 00:35
关于真题部分的练习: 推荐两个网站的蓝桥真题练习:
dotcpp<全面,除了填空题,所有题目基本囊括了>(蓝桥杯真题(更新至2022年) - 编程题库 C语言网
newoj<基本都有,有填空题,且可以联系站长开会员看正确代码>(公告 - New Online Judge,上面之前的几次contest,质量也不错。
同时希望参加蓝桥的鱼友们,都能顺利拿下国一,加油!!!
加入星球
更多内容加入星球可见,欢迎大家: