蓝桥杯学习大纲

(致酷德与热爱算法、编程的小伙伴们)

在查阅了相当多的资料后,发现没有那篇博客、文章很符合我们备战蓝桥杯的学习路径。所以,干脆自己整理一篇,欢迎大家补充!

一、题型分布:

题型分布为填空题、编程题等。 这些题型考察的知识点各不相同。

填空题考察细节理解和计算能力,而编程题则重点考察编程实现和算法理解能力。 在蓝桥杯真题中,填空题的数量相对较少,而编程题则是主要的考察形式。(填空题基本可以在纸上算出来,但为防止粗心,可用暴力的方法在计算机上,运行一遍,用于验证。编程题,如果实在写不出,可以用骗分技巧

其次,我们还可以根据真题的难度来进行分类。 蓝桥杯真题的难度可以分为三个等级:基础题、中等题和难题。

蓝桥杯C/C++题型预览(C++组与Java组题型相似)

二、蓝桥必备高频考点

我们以此为重点学习方向:

1. 基础算法

枚举模拟贪心递归分治
构造前缀和差分

2. 搜索与排序

线性搜索二分法BFSDFS回溯剪枝
深搜优化记忆化搜索位运算冒泡排序归并排序
快速排序桶排序

3. 动态规划

编辑距离最长不重复子串整数背包矩阵连乘最长公共子序列
最长公共子串最长上升子序列最长回文子序列最长回文子串回文分割
最大子段合最大正方形子矩阵滚动数组
数位dp概率dp树形dp区间dp状压dp

4. 数学

GCD&LCM

素数判断素数生成分解质因数费马小定理
扩展欧几里得逆元高斯消元整数拆分模运算

5. 组合数学

容斥原理鸽巢定理乘法原理调和级数斐波那契数

6. 图论

邻接矩阵关联矩阵邻接表链式前向星有向无环图
判圈拓扑排序最短路径PrimKruskal
Dijkstra(堆优化)BellmanFloydSPFA

7. 数据结构

数组链表队列先队列
块状链表LCA并查集线段树树状数组
二叉树哈希

8. 几何

点和向量点积、叉积点和线的关系多边形面积、周长、体积

判点在多边形

多面体内外

坐标旋转

网上流传着这么一句话

其实要考的知识点,还有很多。下面那句话过不了审,我截屏下来了:

三、思维导图:

思维导图能更好的理解学习方向

思维导图 - 大学C组:

大学C组主要分三部分,学习顺序为:数据结构基础->入门数学->其他算法

思维导图 - 大学B组:

在C组的基础上,加上这些。

我知道,大家看到这里,不免会有些焦虑,大家可以借鉴一下这个:

不要焦虑哦!可以最好将算法当作兴趣来培养。

下面这张图为笔者朋友整理的一张,挺简洁,也可作为参考。

四、学习模块

(基础算法思想+蓝桥真题练习)

基础算法篇:

1、枚举算法

2、模拟算法

3、双指针算法

4、链表-算法

5、哈希表-算法

(持续更新中)

五、自用对比

组别:大学C组

知识点及难度(1-10难度系数依次递增)

1、枚举[1-3]
2、排序
(1)冒泡排序[2]
(2)选择排序[3]
(3)插入排序[3]
3、搜索(bfs、dfs)[1-5]
4、贪心[1-5]
5、模拟[1-3]
6、二分[2-5]
7、DP(普通一维数组)[3-5]
8、高精度[1-5]
9、数据结构
(1)栈[2-4]
(2)队列[2-5]
(3)链表[3-5]
10、数学(1)初等数论[3-5]

组别:大学B组

11、排序
(1)归并排序[4-5]
(2)快速排序[4-5]
(3)桶排序[4]
(4)堆排序[4]
(5)基数排序[4-5]

12、搜索
(1)剪枝[4-6]
(2)双向BFS[5-6]
(3)记忆化搜索[5]
(4)迭代加深搜搜[5-6]
(5)启发式搜索[7]
13、DP
(1)背包 DP[4-6]
(2)树形 DP[4-6]
(3)状压 DP[5-6]
(4)数位 DP[5-6]
(5)DP的常见优化[7]
14、字符串
(1)哈希[4-5]
(2)kmp[4-6]
(3)manacher[4-6]
15、图论
(1)欧拉回路[5-7]
(2)最小生成树[5-7]
(3)单源最短路及差分约束系统[5-7]
(4)拓扑排序[5-7]
(5)二分图匹配[7]
(6)图的连通性问题(割点、桥、强联通分量)[7]
(7)DFS序[5-7]
(8)最近共同祖先[5-7]
16、数学
(1)排列组合排[5-6]
(2)二项式定理[6]
(3)容斥原理[6-7]
(4)模意义下的逆元[5]
(5)矩阵运算[6-7]
(6)高斯消元[7]
17、数据结构
(1)ST表
(2)堆[5-6]
(3)数状数组[5-6]
(4)线段树[6-7]
(5)Trie树[5-7]
(6)并查集[5-6]
(7)平衡树(利用系统自带的标准库实现简单平衡树)[5-7]
18、计算几何
(1)基础计算和基本位置关系判定[6-7]
(2)概率论[7++]
(3)博弈论[7++]

六、蓝桥杯知识点总览

以下为蓝桥杯所有考点,可根据兴趣,借鉴补充题目。

1. 基础算法

  • 枚举:通过遍历所有可能的情况来解决问题。

  • 模拟:按照题目要求模拟实际操作过程。

  • 贪心:在每一步选择中都采取最优(即最有利)的选择,从而希望导致结果是全局最优解。

  • 递归:通过函数自己调用自己来解决问题。

  • 分治:将原问题分解为若干个规模更小但结构相同的子问题,递归解决这些子问题,然后将子问题的解合并得到原问题的解。

2. 搜索与排序

  • 子集生成:生成一个集合的所有子集。

  • 线性搜索:在数组或列表中从头到尾依次查找元素。

  • 二分法:在有序数组中通过折半查找的方式快速定位元素。

  • 三分法:将数组分成三部分进行查找或排序。

  • BFS(广度优先搜索):从根节点开始,逐层遍历所有节点。

  • DFS(深度优先搜索):从根节点开始,尽可能深地搜索树的分支。

  • 回溯剪枝:在深度优先搜索中,通过剪枝减少搜索空间,提高搜索效率。

  • 记忆化搜索:通过缓存中间结果,避免重复计算,提高搜索效率。

  • IDA*算法:一种迭代加深的 A* 算法,结合了深度优先搜索和 A* 算法的优点。

  • 位运算:利用位操作进行高效计算。

  • 按位压缩存储状态:通过位运算压缩存储状态,减少内存占用。

  • 选择排序:每次从未排序部分选择最小(或最大)元素放到已排序部分。

  • 冒泡排序:通过相邻元素之间的比较和交换来排序。

  • 归并排序:通过递归地将数组分成两半,排序后再合并。

  • 快速排序:通过选择一个基准元素,将数组分成两部分,一部分小于基准,另一部分大于基准,然后递归排序。

  • 堆排序:利用堆这种数据结构进行排序。

  • 计数排序:通过统计每个元素出现的次数来进行排序。

  • 桶排序:将元素分布到若干个桶中,每个桶再分别排序。

3. 动态规划

  • 编辑距离:计算两个字符串之间,将一个字符串转换成另一个字符串所需的最少编辑操作次数。

  • 最长不重复子串:在字符串中找到最长的不重复字符子串。

  • 整数背包:解决背包问题的一种方法,背包容量和物品重量都是整数。

  • 矩阵连乘:计算矩阵连乘的最小代价。

  • 最长公共子序列:在两个序列中找到最长的公共子序列。

  • 最长公共递增子序列:在两个序列中找到最长的公共递增子序列。

  • 最长上升子序列:在序列中找到最长的上升子序列。

  • 最长回文子序列:在字符串中找到最长的回文子序列。

  • 最长回文子串:在字符串中找到最长的回文子串。

  • 回文分割:将字符串分割成多个回文子串。

  • 最大子段和:在数组中找到连续子数组的最大和。

  • 最大正方形子矩阵:在矩阵中找到最大的正方形子矩阵。

  • 最长链对:在一组区间中找到最长的不重叠区间链。

  • 最大递增子序列和:在序列中找到递增子序列的最大和。

  • 滚动数组:通过使用较小的数组来减少空间复杂度。

  • 数位dp:通过动态规划解决与数字位数相关的问题。

  • 概率dp:通过动态规划解决概率相关的问题。

  • 树形dp:在树结构上进行动态规划。

  • 区间dp:在区间上进行动态规划。

  • 状压dp:通过状态压缩进行动态规划。

  • 插头dp:通过插头状态进行动态规划。

  • 斜率优化:通过斜率优化动态规划的转移方程。

  • 平行四边形优化:通过平行四边形性质优化动态规划的转移方程。

  • 单调队列优化:通过单调队列优化动态规划的转移方程。

  • 数据结构优化:通过数据结构优化动态规划的实现。

4. 数学

  • GCD&LCM:最大公约数和最小公倍数。

  • 素数判断:判断一个数是否为素数。

  • 素数生成:生成一定范围内的所有素数。

  • 分解质因数:将一个数分解为质因数的乘积。

  • 欧拉定理:计算欧拉函数的值。

  • 费马定理:费马小定理及其扩展。

  • 扩展欧几里得:求解线性同余方程。

  • 逆元:计算模逆元。

  • 随机素数测试和大数分解:通过随机测试判断素数,以及大数分解。

  • 高斯消元:通过高斯消元法解线性方程组。

  • 偶合方程:解偶合方程组。

  • 整数拆分:将一个整数拆分为多个整数的和。

  • 大步小步算法:解决某些特定的数学问题。

  • 中国剩余定理:解同余方程组。

  • 原根:计算原根。

  • 快速数论变换:通过快速数论变换进行高效计算。

  • 线性丢番图方程:解线性丢番图方程。

  • 模运算:进行模运算。

  • 卢卡斯定理:计算组合数的模。

  • 杜教筛:通过杜教筛法计算某些特定的数学问题。

  • 威尔逊定理:通过威尔逊定理判断素数。

  • 米勒罗宾随机素数测试:通过米勒罗宾测试判断素数。

  • 完全数:判断一个数是否为完全数。

  • 连分数:处理连分数。

5. 组合数学

  • 容斥原理:通过容斥原理计算集合的大小。

  • 鸽巢定理:通过鸽巢定理解决某些组合问题。

  • 乘法原理:通过乘法原理计算排列和组合的数量。

  • 斯特林数:计算斯特林数。

  • 卡特兰数:计算卡特兰数。

  • 斐波那契数:计算斐波那契数。

  • 幻方:生成幻方。

  • 莫比乌斯反演:通过莫比乌斯反演解决某些组合问题。

  • 母函数:通过母函数解决某些组合问题。

  • 调和级数:计算调和级数。

6. 图论

  • 邻接矩阵:通过邻接矩阵表示图。

  • 关联矩阵:通过关联矩阵表示图。

  • 邻接表:通过邻接表表示图。

  • 链式前向星:通过链式前向星表示图。

  • 有向无环图:处理有向无环图。

  • 欧拉图:判断图是否为欧拉图。

  • 判圈:判断图中是否存在环。

  • 割点:找到图中的割点。

  • 割边:找到图中的割边。

  • :找到图中的桥。

  • 双连通分量:找到图中的双连通分量。

  • 强连通分量:找到图中的强连通分量。

  • 有向图的强连通分量:找到有向图中的强连通分量。

  • 拓扑排序:对有向无环图进行拓扑排序。

  • 二分图判定:判断图是否为二分图。

  • 最短路径:计算图中的最短路径。

  • 连通分量:找到图中的连通分量。

  • 次小生成树:找到图中的次小生成树。

  • 曼哈顿最小生成树:找到曼哈顿距离下的最小生成树。

  • Dijkstra(堆优化):通过堆优化的 Dijkstra 算法计算最短路径。

  • Bellman:通过 Bellman-Ford 算法计算最短路径。

  • Floyd:通过 Floyd-Warshall 算法计算最短路径。

  • 差分约束:通过差分约束解决某些问题。

  • SPFA:通过 SPFA 算法计算最短路径。

  • 最小费用最大流:计算图中的最小费用最大流。

  • 二分图匹配:在二分图中找到最大匹配。

  • 欧拉路:找到图中的欧拉路。

7. 数据结构

  • 数组:基本的数据结构,用于存储和访问数据。

  • 链表:通过节点链接存储数据。

  • :后进先出的数据结构。

  • 队列:先进先出的数据结构。

  • 先队列:优先队列,用于存储和访问数据。

  • 双端队列:可以在两端进行插入和删除操作的数据结构。

  • 块状链表:通过块状结构优化链表的访问。

  • :通过堆结构存储和访问数据。

  • 哈希:通过哈希表存储和访问数据。

  • LCA:通过 LCA 算法解决某些树结构问题。

  • 跳跃表:通过跳跃表优化链表的访问。

  • 并查集:通过并查集解决某些集合问题。

  • 字典树:通过字典树存储和访问字符串数据。

  • 线段树:通过线段树解决区间查询和更新问题。

  • 树状数组:通过树状数组解决某些数组问题。

  • 莫队算法:通过莫队算法解决某些数组问题。

  • 平衡二叉树:通过平衡二叉树存储和访问数据。

  • 二叉搜索树:通过二叉搜索树存储和访问数据。

  • Treap树:通过 Treap 树存储和访问数据。

  • 二叉树:基本的树结构。

  • 笛卡尔树:通过笛卡尔树解决某些数组问题。

  • 划分树:通过划分树解决某些数组问题。

  • 表达式树:通过表达式树解决某些表达式问题。

  • 替罪羊树:通过替罪羊树解决某些树结构问题。

  • 伸展树:通过伸展树解决某些树结构问题。

  • 动态树:通过动态树解决某些树结构问题。

  • 左偏堆:通过左偏堆解决某些堆问题。

  • 可并堆:通过可并堆解决某些堆问题。

  • 主席树:通过主席树解决某些树结构问题。

  • 树链剖分:通过树链剖分解决某些树结构问题。

  • KD树:通过 KD 树解决某些空间问题。

  • 树套树:通过树套树解决某些树结构问题。

  • FHQ_Treap:通过 FHQ_Treap 解决某些树结构问题。

8. 几何

  • 点和向量:处理点和向量的基本操作。

  • 点积、叉积:计算点积和叉积。

  • 点和线的关系:判断点和线的位置关系。

  • 多边形:处理多边形的基本操作。

  • 三角形内心、外心、重心、垂心:计算三角形的内心、外心、重心和垂心。

  • 费马点:计算费马点。

  • 面积、周长、体积:计算几何图形的面积、周长和体积。

  • 判点在多边形内外:判断点是否在多边形内部或外部。

  • 三角剖分:对多边形进行三角剖分。

  • 梯形剖分:对多边形进行梯形剖分。

  • 多边形重心:计算多边形的重心。

  • 多边形切割:对多边形进行切割操作。

  • 多面体体积:计算多面体的体积。

  • 坐标旋转:对坐标进行旋转操作。

  • 凸包:计算点集的凸包。

  • 最近点对:找到点集中的最近点对。

  • 旋转卡壳:通过旋转卡壳算法解决某些几何问题。

  • 半平面交:计算半平面的交集。

  • 最小圆覆盖:找到覆盖点集的最小圆。

  • 三维点和向量:处理三维点和向量的基本操作。

  • 三维点积&叉积:计算三维点积和叉积。

  • 最小球覆盖:找到覆盖点集的最小球。

  • 三维凸包:计算三维点集的凸包。


1、第十六届蓝桥杯大赛软件赛(编程类)


指导思想:

农村包围城市,武装夺取政权”,教员的这句话太有指导含义了,大概意思就是星星之火可以燎原。从简单题开始做,不要好高骛远!当量变引起质变那一刻,蓝桥杯必能拿下!

### 蓝桥杯常见考点与知识点 #### 一、Python 数字塔问题解析 蓝桥杯 Python 题目中常涉及动态规划和递归的思想。例如,“数字塔”问题是经典的路径求解题目,通常可以通过自底向上的方法解决[^1]。以下是实现该问题的一个简单例子: ```python def max_path_sum(triangle): dp = triangle[-1].copy() # 初始化最后一层作为dp数组 for i in range(len(triangle)-2, -1, -1): # 自下而上遍历每一层 for j in range(len(triangle[i])): dp[j] = triangle[i][j] + max(dp[j], dp[j+1]) # 更新当前节点的最大值 return dp[0] triangle = [ [7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5] ] print(max_path_sum(triangle)) # 输出最大路径和 ``` 此代码通过动态规划的方式解决了数字塔中的最短/最长路径问题。 --- #### 二、算法基础知识点 蓝桥杯竞赛中常见的算法知识点包括但不限于以下几种: - **枚举**:适用于范围较小的情况,如寻找特定条件下的所有可能性[^2]。 - **前缀和**:用于快速计算区间内的总和或统计某些属性的数量。 - **全排列**:利用回溯法生成所有的排列组合。 - **深搜(DFS)与广搜(BFS)**:解决图结构或者树形结构的相关问题。 - **递归**:分解复杂问题为更简单的子问题来处理。 对于循环节长度的问题,可以采用模拟的方法逐步记录每一位的结果直到发现重复为止。 --- #### 三、Web 开发相关 ES6 知识点 在 Web 方面,尤其是 JavaScript 的新特性部分也是蓝桥杯考察的重点之一。其中箭头函数是一种简洁表达匿名函数的形式,在实际开发中有广泛应用价值[^3]。下面展示了一个基本的例子: ```javascript const add = (a, b) => a + b; console.log(add(3, 5)); // 输出结果为8 // 如果只有一行返回语句,则可省略大括号和return关键字 const multiply = (x, y) => x * y; console.log(multiply(4, 6)); // 输出结果为24 ``` 这种语法不仅提高了代码的可读性和效率,还减少了传统 function 定义带来的冗余。 --- #### 四、其他注意事项 除了上述提到的内容外,还需要注意一些细节方面的要求,比如输入输出格式严格按照题目描述执行;时间空间复杂度分析能力培养也很重要,因为很多情况下需要优化程序性能才能满足评测标准。 ---
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值