“如果目标是省一,哪些是必须掌握的?”
这个问题,应该是很多同学都想要了解的
毕竟,准备了这么久的蓝桥杯
大家都想要最后再来“查漏补缺”一下
所以,这周的蓝桥杯干货分享,是来自于第十四届蓝桥杯Python组大学B组国一学长——罗书懿,学长将会给我们分享:蓝桥杯省赛的高频考点、代码实现以及解题方法。
蓝桥杯赛制解读
众所周知,蓝桥杯大赛是OI赛制,所以:
因为每道题提交后没有任何反馈,这也就意味着,输出答案的格式一定要与题目要求一致📌!同时,因为是“根据通过测试点数量获得相应分数”,所以,是有部分分的
蓝桥杯省赛高频考点
蓝桥杯想要拿省一,需要掌握的内容,其实挺多的。从基本的编程思想开始,到基本算法、图论、数据结构等都有:
基本编程思想
顺序结构、选择结构、循环结构、递归调用
基本语法
运算、输入、输出、函数、结构体/类、内置库函数API
基础算法
倍增、位运算、前缀和、差分、贪心、双指针、二分
图论基础
图的表示和存储及图的遍历、拓扑排序、最短路算法
数据结构
基础数据结构
链表、栈、队列、堆、树
高级数据结构
并查集(路径压缩、维护集合元素个数、维护到根节点距离)、树状数组
数论
背包模型:01背包、分组背包、多重背包、完全背包
最长递增子序列
区间dp
树形dp
排序算法
归并排序
其他
枚举、模拟、KMP、思维题
代码实现
这里主要介绍“动态规划”相关问题,首先,我们来了解斐波那契数列问题,带你建立“动态规划”核心思维:
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21...
这个数列从第3项开始,每一项都等于前两项之和
表达式为:
F[n]=F[n-1]+F[n-2](n>=2,F[0]=1,F[1]=1)
这种写法虽然简单,但是,效率却十分低下!
存在大量的子问题重复计算,那么,该如何优化呢?
既然存在重复计算,那么,就使用数组存储中间计算结果。
这就是记忆化搜索!
非递归写法,同样采取了用空间换时间的策略:
这三种写法,都有一个共同点:
这就是之前提到的表达式F[n]=F[n-1]+F[n-2]
实际上,这个表达式有一个更高级的名字,叫做——状态转移方程,求解动态规划问题,最关键的就是找到状态转移方程。
找到了状态转移方程之后,你只需选择两种优化方法中的一种解题即可。
其实,我们学习动态规划,都是在学习如何分析题目,建立对应的状态转移方程。求解问题的本质,其实,还是暴力枚举,只不过动态规划的枚举减少了重复计算。
01
多用库函数
比赛限时4个小时,多使用库函数不仅能够节省解题时间,还能降低错误概率(自己写可能会粗心写错),常用的库函数包括排序、栈、堆、队列、键值对、集合等。
02
使用快速输入输出的方式处理数据
c++优化cin与cout
Java使用BufferedReader与BufferedWriter
Python使用sys包下的stdin与stdout
使用快速输入输出的方式处理数据能够缩短程序的运行时间,数据量越大效果越显著,争取多拿分。
03
做题顺序可以调整
在比赛中,思考某题一段时间后没有任何头绪(暴力都不会打),则应当将此题先放一放。