曲阜夫子学校信息学竞赛 Wiki
欢迎来到曲阜夫子学校的信息学竞赛学习园地,下面是根据NOI大纲编纂的知识点汇总
持续更新中...
最近更新
入门级
计算机基础与编程环境
计算机基础与编程环境
- 计算机的基本构成(
CPU
、内存、I/O
设备等) Windows
、Linux
等操作系统的基本概念及其常见操作- 计算机网络和
Internet
的基本概念 - 计算机的历史及其在现代社会中的常见应用
NOI
以及相关活动的的历史- 进制的基本概念与进制转换、字节与字
- 程序设计语言以及程序编译和运行的基本概念
- 使用图形界面创建、复制、删除、移动文件或者目录
- 使用
Windows
系统下的集成开发环境(例如Dev-C++
等) - 使用
Linux
系统下的集成开发环境(例如Code::Blocks
等) g++
、gcc
等常见编译器的基本使用
C++程序设计
C++程序设计
-
基本数据类型
- 整数型:
int
,long long
- 实数型:
float
,double
- 字符型:
char
- 布尔型:
bool
- 整数型:
-
程序基本语句
cin
语句,scanf
语句,cout
语句,printf
语句,赋值语句,复合语句if
语句,switch
语句,多层条件语句for
语句,while
语句,do while
语句- 多层循环语句
-
基本运算
- 算术运算:加、减、乘、除、整除、求余
- 关系运算:大于,大于等于,小于,小于等于,等于,不等于
- 逻辑运算:与(
&&
)、或(||
)、非(!
) - 变量自增与自减运算
- 三目运算
- 位运算:与(
&
)、或(|
)、非(~
)、异或(^
)、左移(<<
)、右移(>>
)
-
数学库常用函数
- 绝对值函数、四舍五入函数、取上整函数、取下整函数、常用三角函数、对数函数、指数函数、平方根函数
-
结构化程序设计
- 顺序结构、分支结构和循环结构
- 自顶向下、逐步求精的模块坏程序设计
- 流程图的概念及流程图描述
-
数组
- 数据的定义,数组与数组下标的含义
- 数组的读入与输出
- 纯一维数组的综合运用
- 纯二维数组与多维数组的综合运用
-
字符串的处理
- 字符数组与字符串的关系
- 字符数组的综合应用
string
类的定义、相关函数引用string
类的综合应用
-
函数与递归
- 函数定义与调用,形参与实参
- 传值参数与传引用参数
- 常量与变量的作用范围
- 递归函数的概念、定义与调用
-
结构体类型
-
指针类型
- 指针的概念及调用
- 指针与数组
- 字符指针与
string
类 - 指向结构体的指针
-
文件及基本读写
- 文件的基本概念,文本文件的基本操作
- 文本文件类型与二进制文件类型
- 文件重定向、文件读写等操作
-
STL模板应用
<algorithm>
中sort
函数- 栈(
stack
)、队列(queue
)、链表(list
)、向量(vector
)等容器
数据结构
数据结构
-
线性表
- 链表:单链表、双向链表、循环链表
- 栈
- 队列
-
简单树
- 树的定义及其相关概念
- 树的父亲表示法
- 二叉树的定义及其基本性质
- 二叉树的孩子表示法
- 二叉树的遍历:前序、中序、后序遍历
-
特殊树
- 完全二叉树的定义与基本性质
- 完全二叉树的数组表示法
- 哈夫曼树的定义、构造及其遍历
- 二叉排序树的定义、构造及其遍历
-
简单图
算法
算法
-
算法概念与描述
- 算法概念
- 算法描述:自然语言描述、流程图描述、伪代码描述
-
入门算法
- 枚举法
- 模拟法
-
基础算法
- 贪心法
- 递推法
- 递归法
- 二分法
- 倍增法
-
数值处理算法
- 高精度的加法
- 高精度的减法
- 高精度的乘法
- 求高精度整数除以单精度整数的商和余数
-
排序算法
- 排序算法的基本概念(稳定性等)
- 冒泡排序
- 简单选择排序
- 简单插入排序
-
图论算法
- 图的深度优先遍历算法
- 图的宽度优先遍历算法
- 洪水填充算法(
floodfill
)
-
动态规划
- 动态规划的基本思路
- 简单一维动态规划
- 简单背包类型动态规划
- 简单区间类型动态规划
数学
数学
-
数及其运算
- 数的概念,算术运算(加、减、乘、除、求余)
- 数的进制:二进制、八进制、十六进制和十进制及其转换
- 编码:
ASCII
码,哈夫曼码,格雷码
-
初中数学
- 初中代数
- 初中平面几何
-
初等数论
- 整除、因数、倍数、指数、质数、合数、同余等概念
- 唯一分解定理
- 欧几里得算法(辗转相除法)
- 埃氏筛法和线性筛法求素数
-
组合数学
- 加法原理
- 乘法原理
- 排列及计算公式
- 组合及计算公式
- 杨辉三角公式
提高级
计算机基础知识与编程环境
计算机基础知识与编程环境
- 在
Linux
系统终端中使用mkdir
、cp
、rm
、mv
等命令新建、复制、删除、移动文件或目录 - 在
Linux
系统终端中使用cd、pwd、ls等命令更改、显示目录路径和查看目录中的文件 - 在
Linux
系统下使用Gedit
、Vim
或Emacs
等文本编辑工具编写代码 - 熟悉
g++
、gcc
等编译器以及优化、数学库等常见编译选项 - 在
Linux
系统终端中运行程序,并使用time
命令查看程序用时(区分real time
、sys time
和user time
) - 了解调试工具
gdb
及其break
、display
、continue
、step
等命令
C++程序设计
C++程序设计
-
类(
class
)- 类的概念及简单应用
- 成员函数和运算符重载
-
STL
模板- 集合(
set
) - 列表(
list
),双端队列(deuqe
),优先队列(priority_queue
) - 多重集合(
multiset
) - 映射(
map
),多重映射(multimap
) - 对(
pair
),元组(tuple
)
- 集合(
数据结构
数据结构
-
线性结构
- 双端栈
- 双端队列
- 有序队列
- 优先队列
- 倍增表(
ST
表)
-
集合与森林
- 等价类
- 并查集
- 树与二叉树的转化——孩子兄弟表示法
-
特殊树
- 线段树与树状数组
- 字典树(
trie
树) - 笛卡尔树
- 二叉平衡树
AVL
、treap
、splay
等 - 基环树
-
常见图
- 稀疏图
- 偶图(二分图)
- 欧拉图
- 有向无环图
- 连通图与强连通图
- 重连通图
-
哈希表
- 数值哈希函数构造
- 排列哈希函数构造
- 字符串哈希函数构造
- 哈希函数冲突的常用解决办法
算法
算法
-
复杂度分析
- 空间复杂度分析
- 时间复杂度分析
-
基础算法
- 分治算法
-
排序算法
- 归并排序
- 快速排序
- 堆排序
- 树形选择排序(锦标赛排序)
- 桶排序
- 基数排序
-
字符串相关算法
- 字符串匹配算法——
KMP
- 字符串匹配算法——
-
搜索算法
- 搜索的剪枝优化
- 记忆化搜索
- 启发式搜索
- 双向宽度优先搜索
- 迭代加深搜索
- 搜索对象的压缩存储
-
图论算法
Prim
和kruskal
等求最小生成树算法- 求次小生成树算法
Dijkstra
、bellman_ford
、SPFA
等求单源最短路算法- 求单源次短路径算法
Floyd-Warshall
算法求任意两点间的最短路和传递闭包- 有向无环图的拓扑排序算法
- 求欧拉道路和欧拉回路算法
- 二分图的构造及其判定算法
- 最近公共祖先
- 求强连通分量算法
- 强连通分量的缩点算法
- 求割点、割边算法
-
动态规划
- 树型动态规划
- 状态压缩动态规划
- 动态规划的常用优化
数学
数学
-
高中数学
- 代数
- 解析几何
- 立体几何
-
初等数论
- 同余式
- 欧拉定理和欧拉函数
- 费马小定理
- 威尔逊定理
- 裴蜀定理
- 逆元
- 扩展欧几里得算法
- 孙子定理(中国剩余定理)
-
组合数学
- 可重集排列
- 可重集组合
- 错排列、圆排列
- 鸽巢原理
- 二项式定理
- 容斥原理
- 卡特兰数
-
线性代数
- 矩阵概念
- 特殊矩阵:稀疏矩阵、三角矩阵、对称矩阵
- 矩阵的初等变换
- 矩阵的加减乘和转置运算
- 线性方程组的高斯消元法
NOI 级
C++程序设计
C++程序设计
STL
模板:容器(containers
)、迭代器(iterators
)、空间配置器(allocators
)、配接器(adapters
)、算法(algorithms
)、仿函数(functors
)- 面向对象的程序设计思想(
OOP
)
数据结构
数据结构
-
线性结构
- 分块
- 块状链表
-
序列
- 后缀数组
- 跳跃表
- 无根树的
Prufer
序列
-
复杂树
- 树链剖分
- 主席树
- 二维线段树
- 后缀树
- 树套树
k-d
树- 最小树形图
- 动态树(
LCT
)
-
可合并堆
- 左偏树
- 二项堆
-
可持久化数据结构
算法
算法
-
算法策略
- 复杂分治思想
- 平衡规划思想
- 构造思想
-
字符串算法
- 求最长回文串的
Manacher
算法 - 多模匹配算法——
AC
自动机 - 求字符串前缀和后缀算法——扩展
KMP
- 确定性有穷自动机——
DFA
算法 - 非确定性有穷自动机——
NFA
算法 - 后缀自动机
- 求最长回文串的
-
图论算法
- 网络流算法
- 图的支配集、独立集与覆盖集
- 二分图的最大匹配——匈牙利算法
- 二分图的最佳匹配算法——
KM
算法 - 一般图的匹配
-
动态规划
- 复杂动态规划模型构建
- 复杂动态规划模型的优化
数学
数学
-
信息论基础
- 熵、互信息、条件熵、相对熵的基本概念
- 信息复杂度的基本概念
- 描述复杂度的基本概念
- 通讯复杂度的基本概念
-
初等数论
- 原根和指数
- 大步小步(`Baby Step Giant Step, BSGS)算法
- 完全数
- 狄利克雷(
Dirichlet
)卷积 - 平方剩余
- 二次同余式
- 二次互反律
-
离散数学
- 代数系统的基本概念
- 群的基本概念
- 置换群与循环群
-
组合数学
- 母函数
- 莫比乌斯变换
Burnside
引理与Polya
原理- 斯特林数
-
高等数学
- 多项式函数微分
- 多项式函数积分
- 泰勒级数
- 快速傅里叶变换(
Fast Fourier Transform, FFT
) - 卷积
-
线性代数
- 矩阵的逆运算
- 行列式及其运算
- 线性相关与矩阵的逆
-
概率论
- 概率相关概念
- 求概率的乘法公式、全概率公式、贝叶斯公式
-
博弈论
- 零和博弈问题——
Nim
博弈等 Sprague-Garundy(SG)
函数概念及应用
- 零和博弈问题——
-
运筹学
- 线性规划之单纯形法
-
计算几何
- 矢量及其运算
- 点、线、面之间的位置判断
- 常见图形的面积计算
- 二维凸包的求法及其应用
- 半平面交
最后更新: 2021-09-16