阶段一:C++ 语言基础
L1 - L16 · 从零开始掌握 C++ 编程语言
信息学奥赛导论
什么是信息学奥赛?NOI / CSP-J-S / NOIP 赛制详解。安装 Dev-C++ 或 VS Code + g++,编写第一个 C++ 程序。了解竞赛评分机制(OI 赛制 vs IOI 赛制)和常见误区。
变量与数据类型
变量命名规则。整型范围与溢出——为什么信奥要用 long long?浮点数精度陷阱。字符型与 ASCII 码。布尔类型与逻辑运算。
运算符与表达式
取模运算的妙用(判断奇偶/数位提取)。自增自减前缀后缀区别。运算符优先级。隐式与强制类型转换。整数除法陷阱。
输入输出精讲
cin/cout 关闭同步加速。scanf/printf 格式控制符。多组输入处理。字符串输入的坑。读写效率对竞赛的意义。
条件判断与分支
if-else 分支结构与逻辑表达式。else-if 多路分支。switch-case 与 break 漏写陷阱。条件运算符。复杂条件拆解技巧。
循环结构(上):for 与 while
for 循环三要素与执行流程。while vs do-while。break 与 continue 正确用法。循环变量作用域。死循环排查。累加/累乘/计数模式。
循环结构(下):嵌套与综合
双层嵌套循环执行顺序分析。经典图案打印。枚举思想入门:暴力穷举所有可能。简单模拟题。
一维数组
数组声明、初始化与内存模型。下标从0开始的意义。常用模式(求最值/统计频率/前缀和初探)。数组越界的危险后果。逆序存储与翻转。
多维数组
二维数组声明与初始化。矩阵基本操作(转置/行列交换)。行优先vs列优先存储。高维数组应用场景。迷宫地图的数组表示法。
字符串基础
C风格字符串与C++ string类选择。长度、拼接、子串查找。字典序概念。字符分类函数。大小写转换。
函数入门
为什么要用函数——代码复用与模块化思维。函数定义、调用与返回值。参数值传递机制。void类型。良好函数设计原则。
函数进阶:引用与递归初识
引用类型的本质——别名而非拷贝。传引用修改实参的实际用途(swap/多返回值)。递归思维启蒙:三要素(基线条件/递推关系/收敛保证)。
STL 入门(上):vector 与 string
STL标准模板库的价值。vector动态数组操作(push_back/pop_back/size/clear/resize)。string的STL操作(erase/insert/find/substr)。迭代器初步认识。
STL 入门(下):algorithm 排序
sort排序函数使用。自定义比较函数cmp。降序排序/多关键字排序。lambda简介。二分查找lower_bound/upper_bound精确含义与应用。
时间复杂度与空间复杂度
算法效率分析的重要性。大O表示法直觉理解。常见复杂度速查表(O(1)到O(n²))。估算代码时间复杂度的方法。竞赛时限与常数优化意识。
阶段一项目:C++ 基础能力测评
涵盖变量/条件/循环/数组/字符串/函数/STL 的20道综合编程题测试。包含洛谷入门难度精选(P1xxx系列),限时完成并讲解。通过率达标方可进入下一阶段。
阶段二:基础算法
L17 - L32 · 排序、搜索、贪心与模拟
模拟算法精讲
模拟类问题通用框架:读入→维护状态→执行操作→输出结果。时间模拟/事件模拟/状态空间表示与更新。典型例题:日期计算/纸牌游戏。
枚举算法
暴力枚举思想精髓。枚举范围确定技巧(避免超时)。多重循环枚举与优化。枚举+判定标准模板。剪枝思想初步:提前排除不可能情况。
排序算法原理
冒泡排序(相邻交换+优化)。选择排序(每轮选最小)。插入排序(摸牌思想)。三种排序的时间/空间/稳定性对比。为什么手写排序必须懂原理但竞赛中很少用。
快速排序与归并排序
快速排序partition过程与pivot选择。最坏情况规避(随机化/三数取中)。归并排序合并两个有序序列。分治思想正式接触。第K大数的快速选择算法。
二分查找(上):整数二分
二分本质:在有序区间缩小搜索范围。两种整数二分模板(左边界/右边界)。mid防溢出写法。单调性判断是使用二分的前提。二分答案思想启蒙。
二分查找(下):浮点二分与二分答案
浮点数二分精度控制。二分答案范式:设计check(x)→确定单调性→搜最大/最小可行值。最大化最小值/最小化最大值经典题型。
贪心算法入门
贪心核心:每步取当前最优hoping全局最优。正确性证明(交换法/反证法)。排序后贪心的经典套路。区间调度问题。哈夫曼编码思想。
贪心算法进阶
更复杂的贪心场景。利用堆辅助贪心决策。反悔贪心:允许撤销之前的决定。贪心+排序+前缀和组合运用。何时该用贪心/何时不能用的判断经验。
高精度运算(上):加减法
为什么需要高精度——long long也装不下时。高精度加法逐位相加+进位处理。高精度减法借位处理与符号判断。用string/vector存储大整数的统一做法。
高精度运算(下):乘法与除法
高精度乘法竖式模拟与优化。高精度×低精度的快捷写法。高精度除法试商法。高精度四则综合应用。高精度+取模在数论中的应用。
前缀和与差分
一维前缀和O(1)区间求和。二维前缀和子矩阵求和。差分数组O(1)区间批量修改。前缀和与差分的互逆关系。高频出现规律总结。
双指针算法
双指针本质:两个游标协同扫描将O(n²)降到O(n)。对撞指针有序数组两数之和。滑动窗口最长/最短满足条件的子序列。字符串处理中的双指针应用。
数学基础(上):GCD/LCM 与质数
最大公约数辗转相除法。LCM公式。质数判断试除法到sqrt(n)。埃拉托斯特尼筛法。质因数分解唯一分解定理。
数学基础(下):快速幂与数论初步
快速幂O(log n)计算a^b。矩阵快速幂预告。同余与模运算性质。快速幂取模应用。简单组合数计算(杨辉三角法)。费马小定理直觉理解。
递归与分治深入
递归深度限制与栈空间。递归树分析方法画调用过程看复杂度。分治范式:分解→解决→合并。归并排序分治视角重审。分治其他经典应用预告。
阶段二综合:基础算法集训
覆盖模拟/枚举/排序/二分/贪心/高精度/前缀和/双指针/数学/递归分治的15道综合训练题。限时模拟真实比赛环境,训练读题速度与代码准确度。
阶段三:数据结构
L33 - L48 · 核心数据结构与抽象思维
栈与队列
栈的后进先出应用(括号匹配/表达式求值)。队列先进先出与BFS预告。单调栈找下一个更大/更小元素经典模板。单调队列滑动窗口最值的线性解法。
链表与指针操作
链表节点设计与基本操作。单链表vs双向链表。虚拟头节点简化技巧。常见面试/竞赛题模式。链表在竞赛中不如数组常用的原因及例外场景。
集合与映射
set自动去重有序存储。multiset允许重复。map键值对映射与计数神器。unordered_set/map哈希实现与O(1)均摊。何时用有序vs无序容器。
优先队列(堆)
堆底层原理:完全二叉树与上浮/下沉操作。priority_queue默认行为与改小根堆方法。Top-K问题天然优势。Dijkstra堆优化预演。堆排序与快排对比。
二叉树的存储与遍历
树的基本术语。二叉树数组表示法与指针表示法。四种遍历(前/中/后/层)。已知两种遍历重建二叉树。BST性质与基本操作。
线段树(上):原理与建树
线段树解决什么问题。二叉树结构递归建树。区间查询(求和/最值)。pushup操作含义。点更新实现。空间预估4N原则。
线段树(下):Lazy Propagation
区间加法的朴素做法为何不够。Lazy Tag需要时才往下推。pushdown详细流程。区间赋值特殊处理。线段树综合应用:区间加+区间求和/最值。
树状数组
树状数组巧妙之处:lowbit实现O(log n)点更新+前缀查询。与线段树区别(代码短/功能受限)。区间修改+单点查询转化。二维树状数组预告。
并查集
解决动态连通性问题。find/union基本实现。路径压缩(折半/完全压缩)。按秩合并(按大小/按深度)。带权并查集维护距离或关系种类。扩展域并查集:食物链。
图的存储与基本概念
图基本概念:顶点/边/度/路/环/连通。有向vs无向/加权图。邻接矩阵O(1)查询边O(V²)空间。邻接表vector标准写法。链式前向星最快存图方式。
图的遍历:BFS 与 DFS
BFS队列层级展开。DFS递归走到底再回溯。BFS求无权图最短路。DFS变形应用(拓扑排序/连通分量/割点桥预告)。vis标记时机讨论。
最短路(上):Dijkstra
单源最短路定义与Dijkstra贪心策略。朴素O(V²)vs堆优化O((V+E)logV)。不能处理负权边原因。路径还原pre数组记录前驱。多种变形预告。
最短路(下):Bellman-Ford 与 SPFA
Bellman-Ford松弛操作本质。SPFA队列优化的Bellman-Ford。SPFA处理负权优势。负环检测方法。不同图中表现差异。竞赛中Dijkstra vs SPFA选择原则。
最小生成树
MST定义:连接所有点的最小总权重无环子图。Kruskal按边权排序+并查集判环。Prim从某点出发不断扩展。适用场景对比。MST唯一性与性质(割定理)。
哈希表与字符串 Hash
哈希函数目标:均匀映射。开放寻址法与拉链法。字符串Hash把字符串映射为数字。自然溢出vs模大质数。双Hash降低碰撞概率。Rabin-Karp O(N+M)模式查找。
阶段三项目:数据结构综合实战
覆盖栈/队列/链表/set-map/堆/树/线段树/BIT/并查集/图论/Hash的15道综合数据结构题。重点考察数据结构的选择与组合运用能力。
阶段四:进阶算法
L49 - L64 · 搜索、动态规划与高级技巧
DFS 搜索(上):回溯法
回溯框架:尝试→标记→递归→撤销标记。全排列经典回溯模板。组合问题start参数控制不重复选取。N皇后回溯+剪枝完美示例。时间复杂度分析与剪枝重要性。
DFS 搜索(下):记忆化搜索
记忆化核心:同样子问题只算一次。从递归到DP的桥梁——本质是「自顶向下」的DP。滑雪问题经典案例。状压DP搜索入门。记忆化vs迭代DP选择考量。
BFS 搜索进阶
BFS状态设计艺术。双向BFS起点终点同时搜索指数级加速。多源BFS多个起点同时入队。BFS+状态压缩解较小规模NP-hard问题。A*算法简介。
DP 入门(上):线性 DP
DP核心:重叠子问题+最优子结构。解题四步骤(定义状态→转移方程→初始化→计算顺序)。线性DP经典:LIS最长上升子序列。LCS最长公共子序列。编辑距离入门。
DP 入门(下):背包问题
01背包每个物品选或不选,滚动数组优化空间。完全背包每个物品无限个。多重背包有限个(二进制拆分/单调队列优化)。分组每组至多选一个。万能思考框架与变体识别。
区间 DP 与树形 DP
区间DP状态定义为区间的DP(合并石子/区间最优)。区间长度的枚举顺序。树形DP在树上做DP(没有环的图上DP)。树上独立集/重心/最长路径。换根DP预告。
状压 DP
状态压缩:用二进制位表示一个集合。bitmask基本操作。状压DP适用条件:状态总数≤~2^20。TSP旅行商问题状压解法。棋盘覆盖/排列问题/最短Hamilton路径。
数位 DP
数位DP场景:统计[L,R]范围内满足条件的数的个数。按位逐位确定+已比上界小的状态标记。前导零处理技巧。通用模板与变形(不含某数字/数位和/能被整除)。
图的连通性:Tarjan
强连通分量:有向图中互相可达的点集。Tarjan算法dfn时间戳+low回溯值配合。缩点变DAG。割点与桥删除使图不连通的点或边。双连通分量v-DCC/e-DCC。
网络流入门
流网络建模:源点/汇点/容量/流量。Ford-Fullkerson残量网络+增广路反复寻找。Edmonds-Karp BFS找最短增广路。Dinic BFS分层+DFS多路增广(竞赛主力)。最大流最小割定理。
数学专题(上):排列组合与容斥
加法与乘法原理。排列P(n,r)与组合C(n,r)。可重排列与可重组合。容斥原理|A∪B|推广到多集。错排问题。卡特兰数组合解释(括号匹配/出栈序列)。
数学专题(下):博弈论与期望 DP
公平组合游戏:必胜态与必败态。Nim游戏异或和为0必败证明。SG定理转化为Nim。mex最小排除值运算。期望DP从终态倒推向初态的概率期望计算。
字符串算法:KMP 与 Manacher
暴力匹配O(nm)为何慢。KMP的next数组前缀等于后缀的最大长度。KMP匹配不回溯文本指针。Manacher O(n)找最长回文子串。中心扩展改进思路。PAM预告。
AC 自动机
Trie字典树构建。AC自动机核心:Trie上加类似KMP的fail指针。fail指针的BFS构建。多模式串同时匹配高效实现。AC自动机+DP统计每种模式出现次数。
计算几何基础
二维向量表示与运算(加减/点积/叉积)。叉积的方向意义与面积意义。点与线的位置关系。极角排序。Andrew monotone chain求凸包。旋转卡壳求直径。射线法判断点在多边形内外。
阶段四项目:算法综合挑战赛
涵盖搜索/DP(线性+背包+区间+树形+状压+数位)/图论进阶(Tarjan/网络流)/数学/字符串/计算几何的20道CSP提高组难度综合题。
阶段五:DP 深度与高级 DS
L65 - L80 · 动态规划专项突破与高级数据结构
DP 优化(上):单调队列与斜率优化
普通DP O(n²)不够用时怎么办。单调队列优化DP维护候选决策点。斜率优化的几何直觉:直线截距的最值。识别可斜率优化的转移方程形式。决策单调性简介。
DP 优化(下):四边形不等式与其他
四边形不等式优化区间DP:O(n²)到O(n log n)。WQS二分带权二分把限制转为代价用二分处理。CDQ分治基于时间的分治降维。各类优化方法适用场景速查表。
树链剖分
树链剖分目的:把树上路径问题转化为区间问题。重儿子与轻儿子的划分。重链与轻链的跳跃访问。配合线段树实现树上路径查询/修改。LCA最近公共祖先多种求法(倍增/树剖/Tarjan)。
虚树
只需处理树上一部分关键点时不需要遍历整棵树——虚树只保留这些点和它们之间的LCA构成的压缩树。构建算法(dfn排序+单调栈)。虚树上DP应用。典型考法总结。
费用流与上下界网络流
从最大流到费用流:每条边增加单位费用。最小费用最大流SPFA在残量网络上找最短费用增广路。上下界可行流有流量下限约束的流网络。无源汇/有源汇上下界流转化的技巧。
二分图与匹配算法
二分图判定(染色法)。匈牙利算法增广路交替找匹配。多种解法(Hungarian/网络流/Hopcroft-Karp)。完美匹配与覆盖。KM算法带权最大完备匹配(最佳匹配)。
差分约束系统
一组形如 xj - xi ≤ ck 的不等式如何求解。转化为图上的最短路问题建模。判可行性(是否有负环)。求特解。差分约束在竞赛中的经典建模套路。
可持久化 DS(上):主席树
可持久化动机:保留数据结构的每一个历史版本。可持久化线段树每次修改只新建受影响的O(log N)个节点。静态区间第K大的经典应用。空间换时间权衡。
可持久化 DS(下):高级应用
可持久化Trie维护历史版本异或最大值查询。可持久化并查集支持回到之前版本状态。可持久化平衡树Treap/Splay简介。竞赛中出现频率与应对策略。
整体二分与 CDQ 分治
整体二分同时对所有询问进行二分而非逐一处理。CDQ分治基于时间的分治用左半修改更新右半查询。三维偏序问题的经典舞台。离线算法的整体思维模式。
分块算法
分块哲学:分成√N块整块暴力/散块单独处理的优雅折中。莫队算法离线区间查询神器O(N√N)。带修莫队扩展。块状链表数组与链表的混合体。当其他高级DS不好写时分块能兜底。
随机化算法
当正解太难写或想不到时,随机化可能是救命稻草。模拟退火模仿金属退火的搜索策略。爬山贪心的随机版本。遗传算法简介。正确性讨论:期望得分与通过概率。
FFT 快速傅里叶变换
多项式乘法朴素O(n²)为何慢。FFT核心:系数表示与点值表示相互转换。蝶形运算与分治实现。NTT模意义下做FFT避免精度。FFT/NTT应用(高精度加速/卷积加速)。
矩阵与线性代数应用
矩阵快速幂回顾与更多应用(fibonacci加速/路径计数)。高斯消元解线性方程组/求行列式/求矩阵秩。线性基异或空间中找极大线性无关组(最大异或和/第K大)。矩阵树定理预告。
高级数据结构杂谈
Treap堆属性+BST属性的随机平衡树。Splay频繁访问操作均摊O(log n)。FHQ Treap分裂/合并简洁实现。李超线段树维护直线集合的区间最值查询(斜率优化DP利器)。根据竞赛趋势选择性深入。
阶段五项目:进阶算法综合攻关
覆盖DP优化/树链剖分/网络流进阶/可持久化/分块/FFT/线性代数/高级DS的15道NOIP提高组/CSP-S以上难度综合题。
阶段六:竞赛冲刺
L81 - L96 · 真题训练、模拟赛与实战技巧
CSP-J 真题精讲(一):2019-2020
2019-2020年CSP-J入门组真题逐题讲解。分析每道题知识点定位、解题切入点、常见错误与扣分原因。建立真题手感——熟悉命题风格与难度梯度。时间分配策略。
CSP-J 真题精讲(二):2021-2022
2021-2022年CSP-J真题精讲。观察命题趋势变化:哪些知识点考查频率上升?新题型值得关注?对比四年试卷结构演变。针对弱项制定强化计划。
CSP-S / NOIP 真题精讲(一)
CSP-S提高组/NOIP近年精选。提高组的难度跨度与入门组的本质区别。Day1与Day2题目分布规律。部分分策略:拿不到满分时通过特殊性质骗尽可能多分数。「暴力分」的艺术。
CSP-S / NOIP 真题精讲(二)
继续提高组真题精讲。重点攻克 Day1 T3/T4 和 Day2 T3/T4 级别难题。正解思维链条还原:从题目特征到算法选择的推理过程。建立自己的「题型-算法」映射库。
模拟赛(一):入门组水平
严格按CSP-J赛制模拟赛(4题/240分钟/OI评分模式)。赛后逐题讲评:标准解法、复杂度分析、常见错误汇总。个人排名与薄弱环节诊断。针对性补强建议。
模拟赛(二):提高组水平
提高组难度模拟赛。体验真正竞赛压力:时间不够用/一道题卡住影响全局/最后时刻取舍决策。赛后心理与技术复盘并重。训练「遇到不会的题怎么最大化拿分」的应试智慧。
竞赛策略与应试技巧
开题顺序科学选择。时间分配黄金法则。部分分获取策略(暴力/特殊数据/打表/随机化)。对拍技术:用暴力程序检验正解正确性的必备技能。文件读写/多组数据细节避坑。CE/RE/TLE/WA快速排查清单。
代码调试与 Bug 排查专项
竞赛中最贵的技能不是写代码而是找Bug。系统化的调试方法学(二分位置法/打印中间值/构造极端数据)。对拍系统的搭建与使用。常见Bug模式库(数组越界/未初始化/整数溢出/精度丢失/忘记清空)。
综合模拟赛(一)
完全仿照正式比赛的全真模拟。赛前准备流程演练。赛中时间分配实时记录。赛后全方位复盘:技术层面(选题/编码/调优)+ 心理层面(焦虑管理/压力应对)。
综合模拟赛(二)
第二次全真模拟,题目难度略高于第一次。重点检验上次复盘后的改进是否落实。暴露新的弱项并立即制定补救方案。建立考前冲刺优先级清单。
考前冲刺:弱项特训
根据前两个阶段的测评结果,为每位学员定制个性化弱项强化方案。DP薄弱?集中刷DP经典题。图论不稳?专题突破Tarjan和网络流。代码实现慢?限时手写板子提速训练。
考前冲刺:高频考点速记
信息学奥赛高频考点与必背板子速览。线段树/Dijkstra/ Tarjan / Dinic / KMP / 高精度等核心板子的默写与计时考核。近三年出题频率统计TOP10知识点回顾。易错陷阱大盘点。
团队协作与讨论训练
学会给他人讲解你的思路——费曼学习法的竞赛版。小组讨论模式:每人轮流讲一道题的正解。从「我会做」到「我能讲清楚别人能听懂」的能力跃迁。培养未来 NOI 团队赛的协作基础。
自由项目:原创算法作品
运用所学知识完成一个自选方向的深度项目:可以是解决某个复杂问题的完整程序、一个可视化算法演示工具、或者对某一类问题的系统性研究总结。培养独立研究与工程落地能力。
结课准备:作品整理与展示
整理96课时以来的所有代码作品与解题记录。制作个人编程成长 Portfolio。撰写结课总结报告:知识图谱绘制、能力自评、目标规划。准备结课演讲的内容与PPT。
结课盛典:信奥成果发布会
96课时的终点也是新征程的起点。全员参与结课展示:个人项目演示 + 解题分享 + 成长故事。颁发结业证书与阶段性成就表彰(最快进步/最佳代码/最强思维等)。家长开放日同步进行,让家长见证孩子的蜕变。后续学习路径规划一对一咨询。
竞赛路线图
从入门到国集的成长路径
课程特色
为什么选择我们的信奥课程
上课流程
每节课 90 分钟的科学安排
知识讲解
新概念引入与原理解析,配合图示与动画帮助理解抽象算法思想
代码示范
老师现场编写核心代码,讲解每一行的设计意图与容易踩坑的地方
动手实践
学员独立完成 2-3 道练习题,老师巡回指导,即时纠错答疑
总结拓展
当堂小结 + 作业布置 + 拓展思考题,有余力的学员可以挑战更高难度
学完你将获得
编程能力 + 竞赛实力双丰收
💻 编程硬技能
- 精通 C++ 语言,能熟练使用 STL 标准库
- 掌握 15+ 种经典算法(排序/搜索/DP/贪心/分治等)
- 掌握 10+ 种核心数据结构(栈/队列/树/图/线段树/BIT等)
- 具备 OJ 在线判题系统的日常训练习惯与方法
- 拥有完整的竞赛代码模板库,开赛即用
- 代码风格规范,调试能力强,能独立排查复杂 bug
🎯 竞赛软实力
- 具备算法思维:看到问题能快速联想到合适的解法方向
- 时间复杂度敏感度:一眼估算出代码能否通过时限
- 应试策略成熟:懂得取舍、会拿部分分、善用暴力骗分
- 心理素质过硬:高压环境下仍能稳定发挥正常水平
- 自学能力强大:能独立阅读英文题面、查阅官方文档
- 目标路径清晰:知道自己在哪个阶段、下一步该往哪走