NOI 竞赛大纲
参考资料
难度系数
- 入门级:。
- 题高级:。
- NOI 级:。
1. 入门级
1.1 基础知识与编程环境
- 【 】计算机的基本构成(CPU、内存、I/O 设备等)
- 【 】Windows、Linux 等操作系统的基本概念及其常见操作
- 【 】计算机网络和 Internet 的基本概念
- 【 】计算机的历史和常见用途
- 【 】NOI 以及相关活动的历史
- 【 】NOI 以及相关活动的规则
- 【 】位、字节与字
- 【 】程序设计语言以及程序编译和运行的基本概念
- 【 】使用图形界面新建、复制、删除、移动文件或目录
- 【 】使用 Windows 系统下的集成开发环境(例如 Dev-C++ 等)
- 【 】使用 Linux 系统下的集成开发环境 (例如 Code::Blocks 等)
- 【 】g++、gcc 等常见编译器的基本使用
1.2 C++ 程序设计
- 程序基本概念
- 【 】标识符、关键字、常量、变量、字符串、表达式的概念
- 【 】常量与变量的命名、定义及作用
- 【 】头文件与名字空间的概念
- 【 】编辑、编译、解释、调试的概念
- 基本数据类型
- 【 】整数型:
int
、long long
- 【 】实数型:
float
、double
- 【 】字符型:
char
- 【 】布尔型:
bool
- 【 】整数型:
- 程序基本语句
- 【 】
cin
语句、scanf
语句、cout
语句、printf
语句、赋值语句、复合语句 - 【 】
if
语句、switch
语句、多层条件语句 - 【 】
for
语句、while
语句、do while
语句 - 【 】多层循环语句
- 【 】
- 基本运算
- 【 】算术运算:加、减、乘、除、整除、求余
- 【 】关系运算:大于、大于等于、小于、小于等于、等于、不等于
- 【 】逻辑运算:与(
&&
)、或(||
)、非(!
) - 【 】变量自增与自减运算
- 【 】三目运算
- 【 】位运算:与(
&
)、或(|
)、非(~
)、异或(^
)、左移(<<
)、右移(>>
)
- 数学库常用函数
- 【 】绝对值函数、四舍五入函数、下取整函数、上取整函数、平方根 函数、常用三角函数、对数函数、指数函数
- 结构化程序设计
- 【 】顺序结构、分支结构和循环结构
- 【 】自顶向下、逐步求精的模块化程序设计
- 【 】流程图的概念及流程图描述
- 数组
- 【 】数组与数组下标
- 【 】数组的读入与输出
- 【 】二维数组与多维数组
- 字符串的处理
- 【 】字符数组与相关函数
- 【 】string 类与相关函数
- 函数与递归
- 【 】函数定义与调用、形参与实参
- 【 】传值参数与传引用参数
- 【 】常量与变量的作用范围
- 结构体与联合体
- 【 】结构体
- 【 】联合体
- 指针类型
- 【 】指针
- 【 】基于指针的数组访问
- 【 】字符指针
- 【 】指向结构体的指针
- 文件及基本读写
- 【 】文件的基本概念、文本文件的基本操作
- 【 】文本文件类型与二进制文件类型
- 【 】文件重定向、文件读写等操作
- STL 模板
- 【 】算法模板库中的函数:
min
、max
、swap
、sort
- 【 】栈(
stack
)、队列(queue
)、链表(list
)、向量(vector
)等容器
- 【 】算法模板库中的函数:
1.3 数据结构
- 线性结构
- 【 】链表:单链表、双向链表、循环链表
- 【 】栈
- 【 】队列
- 简单树
- 【 】树的定义与相关概念
- 【 】树的表示与存储
- 【 】二叉树的定义与基本性质
- 【 】二叉树的表示与存储
- 【 】二叉树的遍历:前序、中序、后序
- 特殊树
- 【 】完全二叉树的定义与基本性质
- 【 】完全二叉树的数组表示法
- 【 】哈夫曼树的定义和构造、哈夫曼编码
- 【 】二叉搜索树的定义和构造
- 简单图
- 【 】图的定义与相关概念
- 【 】图的表示与存储:邻接矩阵
- 【 】图的表示与存储:邻接表
1.4 算法
- 算法概念与描述
- 【 】算法概念
- 【 】算法描述:自然语言描述、流程图描述、伪代码描述
- 入门算法
- 【 】枚举法
- 【 】模拟法
- 基础算法
- 【 】贪心法
- 【 】递推法
- 【 】递归法
- 【 】二分法
- 【 】倍增法
- 数值处理算法
- 【 】高精度的加法
- 【 】高精度的减法
- 【 】高精度的乘法
- 【 】高精度整数除以单精度整数的商和余数
- 排序算法
- 【 】排序的基本概念
- 【 】冒泡排序
- 【 】选择排序
- 【 】插入排序
- 【 】计数排序
- 搜索算法
- 【 】深度优先搜索
- 【 】广度优先搜索
- 图论算法
- 【 】深度优先遍历
- 【 】广度优先遍历
- 【 】泛洪算法(flood fill)
- 动态规划
- 【 】动态规划的基本思路
- 【 】简单一维动态规划
- 【 】简单背包类型动态规划
- 【 】简单区间类型动态规划
1.5 数学与其他
- 数及其运算
- 【 】自然数、整数、有理数、实数及其算术运算(加、减、乘、除)
- 【 】进制与进制转换:二进制、八进制、十进制、十六进制
- 初等数学
- 【 】代数(初中部分)
- 【 】几何(初中部分)
- 初等数论
- 【 】整除、因数、倍数、指数、质(素)数、合数
- 【 】取整
- 【 】模运算与同余
- 【 】整数唯一分解定理
- 【 】辗转相除法(欧几里得算法)
- 【 】素数筛法:埃氏筛法与线性筛法
- 离散与组合数学
- 【 】集合
- 【 】加法原理
- 【 】乘法原理
- 【 】排列
- 【 】组合
- 【 】杨辉三角
- 其他
- 【 】ASCII 码
- 【 】格雷码
2. 题高级
2.1 基础知识与编程环境
- 【 】Linux 系统终端中常用的文件与目录操作命令
- 【 】Linux 系统下常见文本编辑工具的使用
- 【 】g++、gcc 等编译器与相关编译选项
- 【 】在 Linux 系统终端中运行程序,使用 time 命令查看程序用时
- 【 】调试工具 GDB 的使用
2.2 C++ 程序设计
- 类(
class
)- 【 6 】类的概念及简单应用
- 【 6 】成员函数和运算符重载
- STL 模板
- 【 5 】容器(
container
)和迭代器(iterator
) - 【 5 】对(
pair
)、元组(tuple
) - 【 5 】集合(
set
)、多重集合(multiset
) - 【 5 】双端队列(
deque
)、优先队列(priority_queue
) - 【 5 】映射(
map
)、多重映射(multimap
) - 【 5 】算法模板库中的常用函数
- 【 5 】容器(
2.3 数据结构
- 线性结构
- 【 】双端栈
- 【 】双端队列
- 【 】单调队列
- 【 】优先队列
- 【 】ST 表(Sparse Table)
- 集合与森林
- 【 】并查集
- 【 】树的孩子兄弟表 示法
- 特殊树
- 【 】二叉堆
- 【 】树状数组
- 【 】线段树
- 【 】字典树(Trie 树)
- 【 】笛卡尔树
- 【 】平衡树:AVL、treap、splay 等
- 常见图
- 【 】稀疏图
- 【 】偶图(二分图)
- 【 】欧拉图
- 【 】有向无环图
- 【 】连通图与强连通图
- 【 】双连通图
- 哈希表
- 【 】数值哈希函数构造
- 【 】字符串哈希函数构造
- 【 】哈希冲突的常用处理方法
2.4 算法
- 复杂度分析
- 【 】时间复杂度分析
- 【 】空间复杂度分析
- 算法策略
- 【 】离散化
- 基础算法
- 【 】分治算法
- 排序算法
- 【 】归并排序
- 【 】快速排序
- 【 】堆排序
- 【 】桶排序
- 【 】基数排序
- 字符串相关算法
- 【 】字符串匹配:KMP 算法
- 搜索算法
- 【 】搜索的剪枝优化
- 【 】记忆化搜索
- 【 】启发式搜索
- 【 】双向广度优先搜索
- 【 】迭代加深搜索
- 图论算法
- 【 】最小生成树:Prim 和 Kruskal 等算法
- 【 】次小生成树
- 【 】单源最短路:Bellman-Ford、Dijkstra、SPFA 等算法
- 【 】单源次短路
- 【 】Floyd-Warshall 算法
- 【 】有向无环图的拓扑排序
- 【 】欧拉道路和欧拉回路
- 【 】二分图的判定
- 【 】强连通分量
- 【 】割点、割边
- 【 】树的重心、直径、DFS 序与欧拉序
- 【 】树上差分、子树和与倍增
- 【 】最近公共祖先
- 动态规划
- 【 】树型动态规划
- 【 】状态压缩动态规划
- 【 】动态规划的常用优化
2.5 数学与其他
- 初等数学
- 【 】代数(高中部分)
- 【 】几何(高中部分)
- 初等数论
- 【 】同余式
- 【 】欧拉定理和欧拉函数
- 【 】费马小定理
- 【 】威尔逊定理
- 【 】裴蜀定理
- 【 】模运算意义下的逆元
- 【 】扩展欧几里得算法
- 【 】中国剩余定理
- 离散与组合数学
- 【 】多重集合
- 【 】等价类
- 【 】多重集上的排列
- 【 】多重集上的组合
- 【 】错排列、圆排列
- 【 】鸽巢原理
- 【 】二项式定理
- 【 】容斥原理
- 【 】卡特兰(Catalan)数
- 线性代数
- 【 】向量与矩阵的概念
- 【 】向量的运算
- 【 】矩阵的初等变换
- 【 】矩阵的运算:加法、减法、乘法与转置
- 【 】特殊矩阵的概念:单位阵、三角阵、对称阵和稀疏矩阵
- 【 】高斯消元法
3. NOI 级
3.1 C++ 程序设计
- 【 】 面向对象的程序设计思想(OOP)
3.2 数据结构
- 线性结构
- 【 】块状链表
- 序列
- 【 】跳跃表
- 复杂树
- 【 】树链剖分
- 【 】动态树:LCT
- 【 】二维线段树
- 【 】树套树
- 【 】k-d 树
- 【 】虚树
- 可合并堆
- 【 】左偏树
- 【 】二项堆
- 可持久化数据结构
- 【 】可持久化线段树
- 【 】其他可持久化数据结构
3.3 算法
- 算法策略
- 【 】分块
- 【 】离线处理思想
- 【 】复杂分治思想
- 【 】平衡规划思想
- 【 】构造思想
- 字符串算法
- 【 】Manacher 算法
- 【 】扩展 KMP 算法
- 【 】有穷自动机
- 【 】AC 自动机
- 【 】后缀数组
- 【 】后缀树
- 【 】后缀自动机
- 图论算法
- 【 】基环树
- 【 】最小树形图
- 【 】2-SAT
- 【 】网络流
- 【 】图的支配集、独立集与覆盖集
- 【 】匈牙利算法
- 【 】KM 算法
- 【 】一般图的匹配
- 动态规划
- 【 】复杂动态规划模型的构建
- 【 】复杂动态规划模型的优化
3.4 数学与其他
- 初等数论
- 【 】原根和指数
- 【 】大步小步(Baby Step Giant Step,BSGS)算法
- 【 】狄利克雷(Dirichlet)卷积
- 【 】二次剩余
- 【 】二次同余式
- 离散与组合数学
- 【 】群及其基本性质
- 【 】置换群与循环群
- 【 】母函数
- 【 】莫比乌斯反演
- 【 】Burnside 引理与 Pólya 定理
- 【 】斯特林(Stirling)数
- 【 】无根树的 Prüfer 序列
- 线性代数
- 【 】逆矩阵
- 【 】行列式
- 【 】向量空间与线性相关
- 高等数学
- 【 】多项式函数的微分
- 【 】多项式函数的积分
- 【 】泰勒(Taylor)级数
- 【 】快速傅里叶变换
- 概率论
- 【 】概率的基本概念
- 【 】随机变量的期望与方差
- 【 】条件概率
- 【 】贝叶斯公式
- 博弈论
- 【 】尼姆(Nim)博弈
- 【 】SG 函数
- 最优化
- 【 】单纯形法
- 计算几何
- 【 】点、线、面之间位置关系的判定
- 【 】一般图形面积的计算
- 【 】二维凸包
- 【 】半平面交
- 信息论
- 【 】熵、互信息、条件熵、相对熵
- 其他
- 【 】信息复杂度的概念
- 【 】描述复杂度的概念
- 【 】通讯复杂度的概念