跳转至

算法模板库 · 竞赛大纲总览

  • 学习卷课程大纲


    J 34 课 + S 24 课 · 教学链顺序

    查看

  • NOI 大纲 · 入门级


    CSP-J · 难度系数 1~5

    查看

  • NOI 大纲 · 提高级


    CSP-S · 难度系数 5~8

    查看

  • NOI 大纲 · NOI 级


    NOI / CTS · 难度系数 7~10

    查看

  • GESP C++ 一至八级


    编程能力等级认证

    查看

学习卷课程大纲(J 34 课 + S 24 课)

阶段一 · 语言基础(16 课)

课号 主题 覆盖词条 知识点 先修 状态
J-L34 计算机与 NOI 基础常识 KJ-1~6/9/10/11/12 计算机基本构成、操作系统、网络与 Internet、计算机历史、NOI 历史与规则、图形界面文件操作、Windows/Linux IDE、g++ 基本使用 —(行序第一课)
J-L01 程序编译与运行 KJ-⅞/13d 位、字节与字;程序设计语言与编译运行基本概念;编辑、编译、解释、调试
J-L02 程序基本概念 KJ-13a/b/c/e 标识符/关键字/常量/变量/表达式、头文件与名字空间、预处理与宏 L01
J-L03 基本数据类型 KJ-14a~e int/long long、float/double、char、bool、枚举 enum L02
J-L04 输入输出与顺序 KJ-15a/18a cin/scanf/cout/printf、赋值与复合语句;顺序/分支/循环三大结构 L02
J-L05 运算符与表达式 KJ-16a~e/17 算术/关系/逻辑运算、自增自减、三目运算;数学库函数 L03/L04
J-L06 分支结构 KJ-15b/18c if、switch、多层条件语句;流程图 L05
J-L07 循环结构 KJ-15c/d/18b for/while/do while、多层循环;模块化程序设计 L05/L06
J-L08 位运算 KJ-16f 位运算 & \| ~ ^ << >> L05
J-L09 数组 KJ-19a~c 数组与下标、数组读写、二维与多维数组 L03/L07
J-L10 字符串 KJ-20a/b 字符数组及相关函数、string 类及相关函数 L09
J-L11 函数 KJ-21a~c 函数定义与调用、形参实参、传值与传引用、作用范围 L05/L09
J-L12 结构体与联合体 KJ-22a/b 结构体、联合体 L09/L11
J-L13 指针与引用 KJ-23a~e 指针、指针访问数组、字符指针、结构体指针、引用 L09
J-L14 文件读写 KJ-24a~c 文件基本概念与文本读写、文本/二进制类型、文件重定向 L04/L10
J-L15 STL 入门 KJ-25a/b min/max/swap/sort;stack、queue、list、vector 容器 L03/L09

阶段二 · 数据结构(4 课)

课号 主题 覆盖词条 知识点 先修 状态
J-L16 链表 KJ-26a 单链表、双向链表、循环链表 L15/L09
J-L17 栈与队列 KJ-26b/c 栈、队列 L16
J-L18 二叉树 KJ-27a~i 树的定义/表示/存储、二叉树定义性质/存储/前中后序遍历、完全二叉树及数组表示、哈夫曼树与编码、二叉搜索树 L16
J-L19 图存储与表示 KJ-28a/b 图的表示与存储:邻接矩阵、邻接表 L17/L09

阶段三 · 算法(11 课)

课号 主题 覆盖词条 知识点 先修 状态
J-L20 算法概念与复杂度直觉 KJ-29 算法概念、自然语言/流程图/伪代码描述;复杂度分析(逐层计数、循环定级、调和级数/筛法级数)、10⁸ 估算 L07/L09
J-L21 枚举与模拟 KJ-30 枚举法、模拟法 L20
J-L24 递归与递推 KJ-31b/c/21d 递推法、递归法、递归函数 L11/L09
J-L23 排序 KJ-34a~e 排序基本概念、冒泡/选择/插入/计数排序 L09/L15
J-L22 查找与二分 KJ-31d/31e 二分法、倍增法 L20/L23
J-L25 贪心 KJ-31a 贪心法 L20/L23
J-L26 搜索 KJ-35 深度优先搜索 DFS、广度优先搜索 BFS L24/L17
J-L27 图论遍历与泛洪 KJ-36a~c 图的 DFS/BFS 遍历、泛洪算法 Flood Fill L19/L26
J-L28 动态规划入门 KJ-37a~d DP 基本思路、简单一维 DP、背包型 DP、区间型 DP(基础版) L24/L25/L09
J-L29 前缀和与差分 KJ-32a/b 前缀和、差分 L09
J-L30 高精度 KJ-33a~d 高精度加/减/乘法、高精度整数除以单精度整数的商和余数 L10/L24

阶段四 · 数学(3 课)

课号 主题 覆盖词条 知识点 先修 状态
J-L31 进制与编码 KJ-38/42 数及其运算、进制与进制转换、原码反码补码、格雷码、大小端字节序;ASCII、UTF/Unicode/Base64 L03/L05
J-L32 初等数论 KJ-40 取整、模运算与取余、整数唯一分解定理、辗转相除法、素数筛(埃氏/线性) L07/L31
J-L33 离散与组合数学 KJ-41/39 集合、加法/乘法原理、排列、组合、杨辉三角;初中代数与几何 L31/L32

S 侧 · 提高级(24 课)

课号 主题 覆盖词条 知识点 先修 状态
S-L24 Linux 环境与编译调试 KS-43~47 Linux 终端文件与目录命令、文本编辑工具、g++ 常用编译选项、time 查看用时、GDB 调试 —(建议 S 第一课)
S-L01 类与对象 KS-48 类的概念与简单应用、成员函数与运算符重载、继承/多态/虚函数 J 语法基础
S-L02 STL 全量 KS-49 容器与迭代器、pair/tuple、set/multiset、deque/priority_queue、map/multimap、bitset、常用算法函数 J-L15
S-L03 线性结构进阶 KS-50 双端栈、双端队列、单调队列、优先队列、ST 表 J-L17
S-L04 集合与森林·并查集 KS-51 并查集、树的孩子兄弟表示法 J-L24/L25 思想
S-L05 特殊树 KS-52 二叉堆、树状数组、线段树、字典树 Trie、笛卡尔树、平衡树(AVL/Treap/Splay) S-L03
S-L06 常见图 KS-53 偶图(二分图)、欧拉图、有向无环图、连通与强连通、双连通、握手定理与顶点度数 J-L19
S-L07 哈希表 KS-54 数值哈希函数构造、字符串哈希函数构造、哈希冲突处理、随机数 rand J-L10
S-L08 复杂度分析 KS-55a/b 时间复杂度分析、空间复杂度分析 J-L20
S-L09 分治 KS-57a/58a/58b 分治算法、归并排序、快速排序 J-L24
S-L10 排序进阶 KS-58c/d/e 堆排序、桶排序、基数排序 S-L09/S-L05
S-L11 离散化与扫描线 KS-56a/d 离散化、扫描线 S-L08/J-L23
S-L12 贪心进阶 KS-61a 思想/哈夫曼 贪心思想进阶、哈夫曼树应用 J-L25/S-L05
S-L13 搜索进阶 KS-55c/d/56b/c/60a 记忆化搜索、启发式搜索、双向 BFS、迭代加深搜索、剪枝优化 J-L26/S-L08
S-L14 最短路 KS-61b/c/d 单源最短路(Bellman-Ford/Dijkstra/SPFA)、单源次短路、Floyd-Warshall J-L19/S-L08/S-L03
S-L15 MST 与拓扑 KS-61a/e 最小生成树(Prim/Kruskal)、DAG 拓扑排序 S-L04/S-L14
S-L16 图论进阶 KS-61f/g/h/i 欧拉道路与欧拉回路、二分图判定、强连通分量、割点与割边 S-L14/S-L15
S-L17 树的高级算法 KS-61j/k/l 树的重心/直径/DFS 序/欧拉序、树上差分/子树和/倍增、最近公共祖先 LCA S-L16/J-L22
S-L18 动态规划进阶 KS-62a~f 多维 DP、树形 DP、状态压缩 DP、DP 常用优化、LCS、LIS J-L28
S-L19 字符串算法 KS-59a/b 字符串匹配 KMP、Manacher 算法 J-L10/S-L07
S-L20 数论算法 KS-64a~i 同余式、欧拉定理与欧拉函数、费马小定理、威尔逊定理、裴蜀定理、逆元、扩展欧几里得、中国剩余定理、快速幂 J-L32
S-L21 初等数学 KS-63 高中代数、高中几何 J 数学基础
S-L22 离散与组合进阶 KS-65 多重集合、等价关系与等价类、多重集排列/组合、错排列与圆排列、鸽巢原理、二项式定理、容斥原理、卡特兰数、最少硬币找零、命题逻辑 J-L33
S-L23 线性代数 KS-66 向量与矩阵概念、向量运算、矩阵初等变换、矩阵运算、特殊矩阵、高斯消元 S-L22

NOI 大纲 2025 · 入门级(CSP-J)

难度系数:🟢 1~2 | 🟡 3 | 🟠 4~5

2.1.1 基础知识与编程环境(12 项,均 🟢 1)

知识点 难度
计算机的基本构成(CPU、内存、I/O 设备) 🟢 1
Windows、Linux 等操作系统的基本概念及常见操作 🟢 1
计算机网络和 Internet 的基本概念 🟢 1
计算机的历史和常见用途 🟢 1
NOI 以及相关活动的历史 🟢 1
NOI 以及相关活动的规则 🟢 1
位、字节与字 🟢 1
程序设计语言以及程序编译和运行的基本概念 🟢 1
图形界面新建、复制、删除、移动文件或目录 🟢 1
Windows IDE(Dev-C++ 等) 🟢 1
Linux IDE(Code::Blocks 等) 🟢 1
g++ 编译命令的基本使用 🟢 1

2.1.2 C++ 程序设计

知识块 知识点 难度
程序基本概念 标识符、关键字、常量、变量、字符串、表达式;常量与变量的命名、定义及作用 🟢 1
程序基本概念 头文件与名字空间的概念 🟢 2
程序基本概念 编辑、编译、解释、调试的概念 🟢 2
基本数据类型 整数型 int、long long;实数型 float、double;字符型 char;布尔型 bool 🟢 1
程序基本语句 cin/scanf/cout/printf、赋值语句、复合语句 🟢 2
程序基本语句 if、switch、多层条件语句 🟢 2
程序基本语句 for、while、do while 语句 🟢 2
程序基本语句 多层循环语句 🟡 3
基本运算 算术运算;关系运算;逻辑运算;自增自减;三目运算 🟢 1
基本运算 位运算:&、|、~、^、<<、>> 🟢 2
数学库常用函数 绝对值、四舍五入、取整、平方根、三角、对数、指数函数 🟡 3
结构化程序设计 顺序结构、分支结构和循环结构 🟢 1
结构化程序设计 自顶向下逐步求精的模块化设计;流程图 🟢 2
数组 数组与下标、数组的读入与输出 🟢 1
数组 二维数组与多维数组 🟡 3
字符串的处理 字符数组与相关函数;string 类与相关函数 🟢 2
函数与递归 函数定义与调用、常量与变量的作用范围、递归函数 🟢 2
函数与递归 传值参数与传引用参数 🟡 3
结构体与联合体 结构体、联合体 🟡 3
指针与引用 指针、基于指针的数组访问、字符指针、指向结构体的指针 🟠 4
指针与引用 引用 🟠 5
文件及基本读写 文件基本概念与文本操作、文本/二进制类型、文件重定向与读写 🟢 2
STL 模板 min、max、swap、sort 🟡 3
STL 模板 栈、队列、链表、向量等容器 🟠 4

2.1.3 数据结构

知识点 难度
链表:单链表、双向链表、循环链表 🟡 3
栈、队列 🟡 3
树的定义与相关概念 🟡 3
树的表示与存储 🟠 4
二叉树的定义与基本性质 🟡 3
二叉树的表示与存储 🟠 4
二叉树的遍历:前序、中序、后序 🟠 4
完全二叉树的定义与基本性质 🟠 4
完全二叉树的数组表示法 🟠 4
哈夫曼树的定义和构造、哈夫曼编码 🟠 4
二叉搜索树的定义和构造 🟠 4
图的定义与相关概念 🟡 3
图的表示与存储:邻接矩阵 🟠 4
图的表示与存储:邻接表 🟠 4

2.1.4 算法

知识点 难度
算法概念 🟢 1
算法描述:自然语言、流程图、伪代码 🟢 2
枚举法、模拟法 🟢 1
贪心法 🟡 3
递推法 🟡 3
递归法 🟠 4
二分法 🟠 4
倍增法 🟠 4
前缀和 🟡 3
差分 🟠 4
高精度的加法、减法、乘法 🟠 4
高精度整数除以单精度整数的商和余数 🟠 4
排序的基本概念、冒泡、选择、插入、计数排序 🟡 3
深度优先搜索 DFS 🟠 5
广度优先搜索 BFS 🟠 5
图的深度优先遍历 🟠 4
图的广度优先遍历 🟠 4
泛洪算法 Flood Fill 🟠 5
动态规划的基本思路 🟠 4
简单一维动态规划 🟠 4
简单背包类型动态规划 🟠 5
简单区间类型动态规划 🟠 5

2.1.5 数学与其他

知识点 难度
自然数、整数、有理数、实数及其算术运算 🟢 1
进制与进制转换:二、八、十、十六进制 🟢 1
代数(初中部分)、几何(初中部分) 🟢 1
整除、因数、倍数、指数、质(素)数、合数 🟡 3
取整 🟡 3
模运算与取余 🟡 3
整数唯一分解定理 🟡 3
辗转相除法(欧几里得算法) 🟡 3
素数筛法:埃氏筛法与线性筛法 🟠 4
集合 🟢 2
加法原理、乘法原理 🟢 2
排列、组合、杨辉三角 🟠 4
ASCII 码 🟢 2

NOI 大纲 2025 · 提高级(CSP-S)

提高级自动包含入门级全部知识点;新增条目如下。

2.2.1 基础知识与编程环境(5 项,均 🟠 5)

知识点 难度
Linux 系统终端中常用的文件与目录操作命令 🟠 5
Linux 系统下常见文本编辑工具的使用 🟠 5
常用编译命令 g++ 与相关编译选项 🟠 5
终端运行程序、time 命令查看程序用时 🟠 5
调试工具 GDB 的使用 🟠 5

2.2.2 C++ 程序设计

知识块 知识点 难度
类(class) 类的概念及简单应用;成员函数和运算符重载 🔴 6
STL 模板 容器(container)和迭代器(iterator);对 pair、元组 tuple 🟠 5
STL 模板 集合 set、多重集合 multiset;双端队列 deque、优先队列 priority_queue;映射 map、多重映射 multimap;位集合 bitset 🟠 5
STL 模板 算法模板库中的常用函数 🟠 5

2.2.3 数据结构

知识块 知识点 难度
线性结构 双端栈、双端队列、单调队列 🟠 5
线性结构 优先队列、ST 表(Sparse Table) 🔴 6
集合与森林 并查集;树的孩子兄弟表示法 🔴 6
特殊树 二叉堆;树状数组;线段树;字典树 Trie 🔴 6
特殊树 笛卡尔树 🟣 7
特殊树 平衡树:AVL、Treap、Splay 等 🟣 8
常见图 稀疏图 🟠 5
常见图 偶图(二分图)、欧拉图、有向无环图 🔴 6
常见图 连通图与强连通图、双连通图 🟣 7
哈希表 数值哈希函数构造 🟠 5
哈希表 字符串哈希函数构造;哈希冲突的常用处理方法 🔴 6

2.2.4 算法

知识块 知识点 难度
复杂度分析 时间复杂度分析;空间复杂度分析 🔴 6
算法策略 离散化 🔴 6
算法策略 扫描线 🟣 7
基础算法 分治算法 🔴 6
排序算法 归并排序、快速排序、桶排序 🟠 5
排序算法 堆排序、基数排序 🔴 6
字符串算法 字符串匹配:KMP 算法 🔴 6
字符串算法 Manacher 算法 🟣 7
搜索算法 搜索的剪枝优化;记忆化搜索 🔴 6
搜索算法 启发式搜索;双向广度优先搜索;迭代加深搜索 🟣 7
图论算法 最小生成树:Prim 和 Kruskal 等 🔴 6
图论算法 单源最短路:Bellman-Ford、Dijkstra、SPFA 等 🔴 6
图论算法 单源次短路 🟣 7
图论算法 Floyd-Warshall 算法 🔴 6
图论算法 有向无环图的拓扑排序;欧拉道路和欧拉回路;二分图的判定 🔴 6
图论算法 强连通分量;割点、割边 🟣 7
图论算法 树的重心、直径、DFS 序与欧拉序;树上差分、子树和与倍增;最近公共祖先 LCA 🔴 6
动态规划 多维动态规划;树型动态规划 🔴 6
动态规划 状态压缩动态规划 🟣 7
动态规划 动态规划的常用优化 🟣 8

2.2.5 数学与其他

知识块 知识点 难度
初等数学 代数(高中部分) 🟠 5
初等数学 几何(高中部分) 🔴 6
初等数论 同余式 🟠 5
初等数论 欧拉定理和欧拉函数;费马小定理;威尔逊定理;裴蜀定理;模运算意义下的逆元;扩展欧几里得算法;中国剩余定理 🟣 7
离散与组合数学 多重集合;等价关系与等价类;多重集上的排列与组合;错排列、圆排列;鸽巢原理;二项式定理 🔴 6
离散与组合数学 容斥原理;卡特兰(Catalan)数 🟣 7
线性代数 向量与矩阵的概念 🟠 5
线性代数 向量的运算;矩阵的初等变换;矩阵的运算;特殊矩阵的概念 🔴 6
线性代数 高斯消元法 🟣 7

NOI 大纲 2025 · NOI 级(概述)

难度系数 7~10(🟣 7~8 | ⚫ 9~10,其中【10】仅用于 CTS 集训队选拔)。

知识块 知识点(难度系数)
C++ 程序设计 面向对象的程序设计思想 OOP【8】
数据结构 · 线性结构 块状链表【8】
数据结构 · 复杂树 树链剖分【8】、动态树 LCT【10】、树套树【9】、k-d 树【9】、虚树【8】
数据结构 · 可合并堆 左偏树【8】、二项堆【10】
数据结构 · 可持久化 可持久化线段树【8】、其他可持久化数据结构【9】
算法 · 策略 分块【8】、离线处理思想【8】、复杂分治思想【9】、平衡规划思想【9】、构造思想【9】
算法 · 字符串 扩展 KMP【8】、有穷自动机的概念【8】、AC 自动机【8】、后缀数组【8】、后缀树【9】、后缀自动机【10】
算法 · 图论 基环树【8】、最小树形图【10】、2-SAT【8】、网络流【8】、支配集/独立集/覆盖集【10】、匈牙利算法【8】、KM 算法【10】、一般图的匹配【10】
算法 · 动态规划 复杂动态规划模型的构建【9】、复杂动态规划模型的优化【9】
数学 · 初等数论 原根和指数【8】、BSGS 算法【8】、狄利克雷卷积【9】、二次剩余【10】、二次同余式【10】
数学 · 离散与组合 群及其基本性质【9】、置换群与循环群【9】、母函数【9】、莫比乌斯反演【9】、Burnside 引理与 Pólya 定理【9】、斯特林数【9】、无根树的 Prüfer 序列【9】
数学 · 线性代数 逆矩阵【9】、行列式【9】、向量空间与线性相关【9】、基与线性基【9】
数学 · 高等数学 多项式函数的微分【8】、积分【8】、泰勒级数【10】、快速傅里叶变换【10】
数学 · 概率论 概率的基本概念【8】、期望与方差【9】、条件概率【9】、贝叶斯公式【9】
数学 · 博弈论 尼姆(Nim)博弈【9】、SG 函数【9】
数学 · 最优化 单纯形法【10】
数学 · 计算几何 点线面位置关系判定【8】、一般图形面积计算【8】、二维凸包【8】、半平面交【9】
数学 · 信息论与其他 熵与互信息等【10】;信息/描述/通讯复杂度的概念【10】

GESP C++ 编程能力等级认证(一至八级)

级别 核心知识内容(C++) 对应本站课程
一级 计算机基础与编程环境、计算机历史、变量、基本数据类型、控制语句结构(顺序/循环/选择)、基本运算、输入输出语句 J-L01~L07
二级 计算机的存储与网络、程序设计语言特点、流程图、ASCII 编码、类型转换、多层分支/循环、常用数学函数 J-L03~L07、J-L31
三级 数据编码(原码/反码/补码)、进制转换、位运算、算法的概念与描述、一维数组、字符串及其函数、枚举法、模拟法 J-L08~L10、J-L21、J-L31
四级 函数、形参与实参/作用域、指针、结构体、二维与多维数组、递推算法、排序(冒泡/插入/选择)与稳定性、复杂度估算、文件重定向与读写、异常处理 J-L09、J-L11~L14、J-L20、J-L23、J-L24
五级 初等数论、数组模拟高精度四则运算、单/双/循环链表、二分查找与二分答案、递归、贪心算法、分治(归并/快排)、复杂度估算(多项式/对数) J-L16、J-L22、J-L24、J-L25、J-L30、J-L32
六级 树的定义/构造/遍历、哈夫曼树与编码、完全二叉树、二叉排序树、格雷编码、DFS/BFS、简单动态规划(一维 DP、简单背包)、面向对象与类、栈/队列/循环队列 J-L17~L19、J-L26、J-L28、S-L01、J-L31
七级 数学库常用函数(三角/对数/指数)、复杂动态规划(二维 DP、区间 DP、LIS、LCS、滚动数组优化)、图的定义及遍历、泛洪算法、哈希表 J-L27、J-L28、J-L29、S-L07、S-L19
八级 计数原理、排列与组合、杨辉三角、倍增法、代数与平面几何(初中)、图论算法综合应用(最小生成树、单源最短路)、复杂算法效率分析、算法优化 J-L22、J-L25、J-L31~L33、S-L14、S-L15