知识点导航
严格对照 NOI 竞赛大纲(2025 修订版),按模块分类学习
计算机基础与常识
10 个计算机基本构成
CPU、内存(RAM/ROM)、输入/输出设备的工作原理与相互关系
位、字节与字
bit / Byte / Word 的概念,存储单位换算(KB/MB/GB/TB),二进制存储原理
数制与进制转换
二进制、八进制、十进制、十六进制之间的互转方法与练习
操作系统基本概念
操作系统功能,Windows/Linux 常见操作,文件系统基础
计算机网络基础
网络基本概念、IP 地址、域名、HTTP 协议入门
信息安全基础
常见安全概念、计算机病毒、网络安全常识
计算机历史与应用
计算机发展简史、图灵机概念、NOI/IOI 等竞赛介绍
NOI 竞赛规则与历史
NOI 系列活动历史、CCF 组织、赛制规则、评分标准
编译与运行概念
编译型与解释型语言区别,源代码→可执行文件流程,调试基本概念
g++ 编译器使用
g++ 基本编译命令、常用编译选项(-O2/-std=c++14/-o),命令行操作
搜索
4 个基础数学
6 个基础算法
10 个模拟与枚举
按题意逐步实现的思路,暴力枚举优化技巧,处理复杂模拟题的方法论
排序算法
冒泡/选择/插入排序原理与手写,快速排序/归并排序框架,sort 函数与自定义比较器
递推
递推关系建模,状态转移方程设计,斐波那契/台阶/过河卒等经典问题
时间复杂度分析
O(1)/O(logn)/O(n)/O(nlogn)/O(n²)/O(2^n) 的识别与估算,主定理入门
贪心算法
贪心策略设计与证明,活动选择/区间调度/哈夫曼编码等经典模型
空间复杂度分析
常见数据结构的空间占用计算,内存限制下的策略
二分查找
整数二分(两种边界)、浮点二分、lower_bound/upper_bound 使用
前缀和与差分
一维/二维前缀和构建与查询,差分数组的区间修改与还原
双指针
对撞指针、快慢指针、滑动窗口,适用场景与模板总结
高精度运算
大整数加减乘除的数组实现,压位高精度
基础数据结构
6 个C++ 程序设计(J 级)
14 个变量与数据类型
int / long long / float / double / char / bool 的范围、精度与常见溢出陷阱
常量与变量赋值
const 定义常量,赋值语句,自增自减运算,类型转换(隐式/显式)
输入输出
cin/cout 与 scanf/printf 的使用与区别,格式化输出,输入优化
运算符与表达式
算术/关系/逻辑/赋值/条件运算符,运算优先级表,短路求值
条件语句
if / else if / else,switch-case,嵌套条件的代码风格与易错点
循环语句
for / while / do-while,break / continue,嵌套循环,循环变量作用域
一维数组
声明初始化、遍历、数组越界问题、常见应用(计数、标记、桶排序)
二维数组
矩阵存储、遍历顺序、矩阵转置、蛇形填数等经典模型
字符数组与字符串
char 数组与 string 类,字符串输入(getline),strlen/strcmp/strcpy,字符串处理技巧
函数定义与调用
函数声明/定义/调用,参数传递(值传递),返回值,局部/全局变量
递归函数
递归三要素(边界/递推/return),递归调用栈,经典递归模型(阶乘/斐波那契/汉诺塔)
结构体
struct 定义与使用,结构体数组,结构体排序,嵌套结构体
指针基础
指针概念、取地址与解引用、指针与数组关系、引用(&)
文件操作
freopen 重定向输入输出,文件读写基础
高级搜索与技巧
9 个数学进阶
10 个扩展欧几里得
求解 ax+by=gcd(a,b),裴蜀定理,二元一次不定方程
乘法逆元
扩展 GCD 求逆元、费马小定理求逆元、线性递推求 1~n 逆元
中国剩余定理
CRT 基本形式、扩展 CRT(EXCRT)
矩阵快速幂
矩阵乘法、矩阵快速幂加速递推、构造转移矩阵
容斥原理
集合计数、二进制枚举子集实现容斥、Mobius 函数入门
欧拉函数
φ(n) 定义与计算、欧拉定理、与积性函数的关系
概率与期望
期望 DP、马尔可夫链入门、概率生成函数入门
博弈论
Nim 游戏、SG 函数、Sprague-Grundy 定理、公平组合博弈
组合计数进阶
Lucas 定理、卡特兰数、Burnside/Polya 计数入门
Pollard-Rho 素性测试
Miller-Rabin 素性测试、Pollard-Rho 因数分解
字符串算法
6 个动态规划
8 个图论
9 个最短路径算法
Dijkstra(堆优化)、SPFA、Floyd 算法原理、适用条件与复杂度对比
最小生成树
Kruskal 算法(并查集)、Prim 算法,最小生成树性质与应用
拓扑排序
BFS/Kahn 算法、DFS 实现、DAG 判定、拓扑排序上的 DP
强连通分量
Tarjan 算法、Kosaraju 算法、缩点建新图
LCA
倍增法求 LCA、Tarjan 离线算法、树剖求 LCA
二分图
二分图判定(染色法)、匈牙利算法、Konig 定理
网络流
最大流(EK/Dinic 算法)、最小割、费用流、二分图匹配
差分约束
将不等式组转化为图论最短/最长路问题
欧拉路径与回路
判定条件、Hierholzer 算法求欧拉回路