logo资料库

oi-wiki-18.12.pdf

第1页 / 共525页
第2页 / 共525页
第3页 / 共525页
第4页 / 共525页
第5页 / 共525页
第6页 / 共525页
第7页 / 共525页
第8页 / 共525页
资料共525页,剩余部分请下载后查看
简介
欢迎来到 OI Wiki。
OI 赛制简介
赛事介绍
NOIP
省选
NOI
WC
APIO
CTSC
IOI
赛制介绍
OI 赛制
IOI 赛制
ICPC 赛制
Codeforces (CF) 赛制
其他国家和地区的 OI 竞赛
美国:USACO
波兰:POI
克罗地亚:COCI
日本:JOI
台湾地区:資訊奧林匹亞競賽
俄罗斯:ROI
加拿大:CCC & CCO
法国与澳大利亚:FARIO
其它大洲级 OI 竞赛
BalticOI
BalkanOI
CEOI
Nordic Olympiads in Informatics (NOI)
学习资源
在线测试 (训练) 平台
国内
国外
教程
书籍
工具
题集
常见错误
常见技巧
评测工具
Cena
Lemon
自行编译
数据格式
Arbiter
使用方法
注意事项,槽点
自定义校验器的编写
测评时注意事项
诶我怎么只能看见代码不能看见每个点得多少分
诶这个测评系统好难看
诶怎么测提交答案题啊
诶这个测评系统有没有漏洞
吐槽
CCR-Plus
编辑工具
Vim – 编辑器之神
历史与争端
安装
编译
基础篇
插入模式 (insert)
普通模式 (normal)
命令行模式
可视模式
插件篇
文件管理
美化界面
启动界面
小方便性插件
配置篇
基础设置
快捷键设置
写代码好用的
关于插件
关于高效编辑的建议
Visual Studio Code - 微软家的编辑器
简介
WSL (Windows 10)
0x01 引言
0x02 准备
0x04 基础配置
更换为国内软件源
安装中文环境
安装编译环境
0x05 进阶操作
安装图形环境,并使用远程桌面连接
0x09 延伸内容
后记
Special Judge
Testlib
Lemon
Cena
CCR
Arbiter
HUSTOJ
QDUOJ
LibreOJ(SYZOJ 2)
Testlib
关于本项目
基础部分
基础部分简介
枚举
给出解空间
减少枚举的空间
选择合适的枚举顺序
模拟
递归 & 分治
递归
递归三要素
递归式
递归出口
界函数
递归模板
递归优化
分治
贪心
常见做法
证明方法
排序法
后悔法
code
排序
稳定性
时间复杂度
冒泡排序
归并排序
逆序对
参考
快速排序
STL
线性找第 k 大的数
参考
计数排序
参考
排序的应用
表达式求值
递归
非递归
习题
二分
二分搜索
STL 的二分查找
三分法
分数规划
二分法
Dinkelbach 算法
构造
前缀和 & 差分
前缀和
参考
文件操作
文件的概念
文件的操作步骤
freopen 函数
命令格式
参数说明
使用方法
模板
C++ 的 ifstream/ofstream 文件输入输出流
使用方法
模板
搜索
搜索部分简介
深度优先搜索 (DFS)
宽度优先搜索 (BFS)
双向宽度优先搜索
A 搜索
IDA 搜索
剪枝
极端法
调整法
数学方法
meet-in-middle 分治
DFS
模板
实现(对于图来说)
在树 / 图上 DFS
BFS
实现
open-closed 表
在树 / 图上 BFS
应用
例题
参考
双端队列 BFS
适用范围
实现
例题
Codeforces 173B
Code
优先队列 BFS
双向 BFS
启发式搜索
A*
例题 八数码
例题 k 短路
迭代加深搜索
简介
步骤
代码结构
注意事项
IDA*
IDA 简介
优点
缺点
例题
练习题
回溯法
Dancing Links
优化
前言
优化与剪枝
记忆化搜索
最优性剪枝
可行性剪枝
动态规划
动态规划部分简介
钢条切割
矩阵链乘法
动态规划原理
1. 最优子结构
2. 子问题重叠
重构最优解
最长公共子序列
最优二叉搜索树
最长连续不下降子序列
最长不下降子序列
最简单的第一种
稍复杂的第二种
经典问题(来自习题)
DAG 中的最长简单路径
最长回文子序列
最长回文子串
双调欧几里得旅行商问题
思路一
思路二
整齐打印
编辑距离
最优对齐问题
公司聚会计划
译码算法
基于接缝裁剪的图像压缩
字符串拆分
投资策略规划
库存规划
签约棒球自由球员
记忆化搜索
记忆化搜索是啥
总结一下记忆化搜索是啥
记忆化搜索与动态规划的关系
如何写记忆化搜索
方法 I
方法 II
记忆化搜索的优缺点
记忆化搜索的注意事项
模板
背包 DP
0-1 背包
完全背包
多重背包
区间 DP
什么是区间 DP?
怎样进行状态转移
怎样处理环
核心代码
几道练习题
DAG 上的 DP
例子
建立 DAG
转移
题解
树形 DP
例题
习题
状压 DP
状压 dp 简介
常用格式
典型例题
数位 DP
经典题型
几道练习题
插头 DP
DP 优化
二进制优化解多重背包
几道练习题
单调队列 & 单调栈优化
几道练习题
斜率优化
几道练习题
四边形不等式优化
什么是四边形不等式?
回到题目
说了这么多,怎么进行状态转移呢?
时间复杂度证明
一道练习题:
参考资料
其它 DP 方法
字符串
字符串部分简介
字符串是啥?
字符集
如何存字符串
字符串存储的位置
C / C++ 标准库中的字符串
C 标准库
strlen
printf
scanf
sscanf
sprintf
strcmp
strcpy
strncpy
strcat
strstr
strchr
strrchr
C++ 标准库
std::string
字符串匹配
字符串匹配问题
单串匹配
多串匹配
匹配一个串的任意后缀
匹配多个串的任意后缀
暴力做法
Hash 的方法
KMP 算法
哈希
Hash 的思想
Hash 的实现
Hash 的分析与改进
Hash 的应用
前缀函数与 KMP 算法
前缀函数定义
朴素算法
高效算法
第一个优化
第二个优化
最终算法
实现
应用
在字符串中查找子串:Knuth-Morris-Pratt 算法
统计每个前缀的出现次数
一个字符串中本质不同子串的数目
字符串压缩
根据前缀函数构建一个自动机
练习题目
字典树 (Trie)
Trie
在 Trie 上 KMP
回文自动机
回文树
后缀数组 (SA)
1. 前言
后缀数组和后缀树
各种定义
2. 一些构造方法
最简单的暴力
倍增
AC 自动机
KMP 自动机
AC 算法就是 Trie 上的自动机
AC 自动机的实现
后缀自动机 (SAM)
后缀自动机的定义
子串的性质
构造后缀自动机的实例
在线性时间内构造后缀自动机
结束位置 endpos
后缀链接
小结
算法
正确性证明
对操作次数为线性的证明
实现
更多的性质
状态数
转移数
应用
检查字符串是否出现
不同子串个数
所有不同子串的总长度
字典序第k大子串
最小循环移位
出现次数
第一次出现的位置
所有出现的位置
最短的没有出现的字符串
两个字符串的最长公共子串
多个字符串间的最长公共子串
例题
相关资料
后缀树
Manacher
描述
更进一步的描述
解法
朴素算法
Manacher 算法
Manacher 算法的复杂度
Manacher 算法的实现
分类讨论
统一处理
练习题目
最小表示法
Z 函数(扩展 KMP)
样例
朴素算法
计算 Z 函数的高效算法
实现
对该实现的注释
算法的渐进行为
应用
查找子串
一个字符串中本质不同子串的数目
字符串压缩
练习题目
数学
数学部分简介
数学部分简介
以下是你可以在本部分找到的知识 (部分未完成,待补充)
NOIP 中有可能会考察的知识点
进制
二进制
八进制
十六进制
进制间的相互转化
十进制转二进制 / 八进制 / 十六进制
二进制 / 八进制 / 十六进制转十进制
二进制 / 八进制 / 十六进制间的相互转换
位运算
与、或、异或
取反
左移和右移
位运算的应用
位运算的常用方法
题目推荐
参考
高精度
快速幂
实现代码
非递归版
递归版
素数
素数判定
暴力做法
Miller-Rabin 素性测试
Fermat 素性测试
卡迈克尔数
二次探测定理
实现
参考
反素数
定义
简介
常见题型
求因子数一定的最小数
求 n 以内因子数最多的数
最大公约数
最大公约数
两个数的
多个数的
最小公倍数
两个数的
多个数的
EXGCD - 扩展欧几里得定理
证明
欧拉函数
欧拉函数的一些神奇性质
如何求欧拉函数值
筛法
素数筛法
筛法求欧拉函数
筛法求莫比乌斯函数
筛法求约数个数
其他线性函数
费马小定理
费马小定理
欧拉定理
证明
扩展欧拉定理
证明
裴蜀定理
什么是裴蜀定理?
证明
应用
乘法逆元
逆元简介
如何求逆元
扩展欧几里得法
快速幂法
线性求逆元
逆元练习题
线性方程
介绍
求解方法
中国剩余定理
「物不知数」问题
算法简介及过程
算法流程
伪代码
算法的证明
应用
比较两 CRT 下整数
扩展:模数不互质的情况
两个方程
多个方程
BSGS
大步小步算法
1.0 基础篇
2.0 略微进阶篇
3.0 扩展篇
原根
高斯消元
高斯消元
消元法及高斯消元法思想
1.1 消元法说明
1.2 消元法理论的核心
1.3 高斯消元法思想概念
高斯消元五步骤法
第 1 步 增广矩阵行(初等)变换为行最简形
第 2 步 还原线性方程组
第 3 步 求解第一个变量
第 4 步 补充自由未知量
第 5 步 列表示方程组的通解
行列式
生成树计数
矩阵
定义
性质
矩阵的逆
运算
矩阵乘法
参考代码
应用
矩阵加速递推
习题
复数
复数的引入,定义和分类
复数的引入
复数的定义和分类
复数的性质与运算
复数的几何意义
复数的运算
复数的加法与减法
复数的乘法与除法
分段打表
注意事项
例题
莫比乌斯反演
简介
积性函数
定义
性质
例子
Dirichlet 卷积
定义
性质
例子
莫比乌斯函数
定义
性质
证明
补充结论
线性筛
拓展
莫比乌斯反演
公式
证明
问题形式
「HAOI 2011」Problem b
「SPOJ 5971」LCMSUM
「BZOJ 2154」Crash 的数字表格
杜教筛
线性基
多项式部分简介
拉格朗日插值
题目大意
方法 1:差分法
方法 2:高斯消元
方法 3: 拉格朗日差值法
代码实现
快速傅里叶变换
DFT IDFT FFT 官方定义?
为什么要使用 FFT?
什么是 FFT
多项式的系数表示法与点值表示法
复数的引入
单位复根的引入
FFT 的流程
FFT 流程第一步之 DFT(共两步)
FFT 流程第二步之 IDFT(共两步)
算竞选手看过来~ NTT(数论优化的快速傅里叶变换)
快速数论变换
简介
学习 NTT 之前...
生成子群
原根
NTT
快速沃尔什变换
简介
FWT 的运算
FWT 之与("3026 )运算和或(|)运算
或运算 Ai
与运算
异或运算
同或运算
排列组合
排列组合简介
排列组合公式及定义
排列的定义
排列的计算公式
组合的定义
组合的计算公式
排列组合的分类
排列
组合
组合数的性质
圆排列
重复排列(有限)
重复组合(无限)
不相邻的排列
错位排列(错排)
加法 & 乘法原理
加法原理
乘法原理
两原理的区别
几个关于组合的公式
卡特兰数
Catalan 数列
斯特林数
Stirling 数(子集划分)
康托展开
什么是排列的排名?
时间复杂度?
怎么实现?
举个栗子
逆康托展开
引用上面展开的例子
容斥原理
容斥原理在算法竞赛中的应用
练习
抽屉原理
概率 & 期望
事件
单位事件、事件空间、随机事件
事件的计算
概率
定义
公理
计算
期望
定义
性质
例题
置换群
数值积分
线性规划
博弈论
公平组合游戏
Nim 游戏
博弈图和状态
Nim 和
证明
有向图游戏与 SG 函数
将 Nim 游戏转换为有向图游戏
参考文献
杂项
向量
定义及相关概念
向量的线性运算
向量的加法与减法
向量的数乘
平面向量的基本定理及坐标表示
平面向量基本定理
平面向量的坐标表示
平面向量的坐标运算
向量的数量积
扩展
向量与矩阵
向量积
极坐标与极坐标系
任意角与弧度制
极坐标与极坐标系
数据结构
数据结构部分简介
STL 简介
什么是 STL?
数据结构
序列式容器
适配器容器
关联式容器
算法
参考
std :: vector
为什么要用 vector
vector 重写了比较运算符
vector 的内存是动态分配的
vector 可以用赋值运算符来进行初始化
vector 的构造函数
vector 元素访问
vector 迭代器
vector 容量
vector 修改器
vector 特化 std::vector
priority_queue
成员函数
示例
map
map 是啥鬼?
map 具体怎么使用?
map 常数靠得住吗?
更快:基于 Hash 实现的 map!
bitset
bitset :
介绍 :
运算符 :
成员函数 :
作用 :
pb_ds 简介
priority_queue
__gnu_pbds :: priority_queue
模板形参
构造方式
成员函数
示例
队列
链表
哈希表
哈希表
哈希函数
冲突
拉链法
实现
拉链法
例题
并查集
初始化
查找
路径压缩
合并
启发式合并(按秩合并)
时间复杂度及空间复杂度
时间复杂度
空间复杂度
经典题目
其他应用
堆的分类
二叉堆
结构
插入操作
删除操作
减小某个点的权值
实现
建堆
方法一:使用 decreasekey(即,向上调整)
方法二:使用向下调整
分块思想
简介
区间和
区间和 2
对询问分块
块状链表
例题
块状数组
树分块
单调栈
何为单调栈
如何使用单调栈
插入
使用
应用
单调队列
例题
概念
例题分析
倍增
RMQ 问题
简介
引入
ST 表
模板代码
注意点
总结
树上倍增求 LCA
LCA 简介
暴力做法
树上倍增
预处理
查询
总结
练习
树状数组
简介
原理
用法及操作
例题
线段树
1. 写在前面
2. 线段树是什么
3. 线段树有什么用
4. 线段树怎么实现
(1) 线段树的基本结构与建树
(2) 线段树的区间查询
(3) 线段树的区间修改与懒惰标记
5. 一些优化
6. 线段树基础题推荐
(1) LUOGU P3372 【模板】线段树 1
(2) LUOGU P3373 【模板】线段树 2
(3) CODEVS 线段树练习 (这是一个系列)
(4) HihoCoder 1078 线段树的区间修改
(5) 2018 Multi-University Training Contest 5 Problem G. Glad You Came
拓展 - 猫树
原理
实现
堆式建树
参考
划分树
建树
查询
理论复杂度和亲测结果
后记
虚树
引子
Description
Input
Output
Sample Input
Sample Output
HINT
Source
虚树 Virtual Tree
推荐习题
BZOJ - 2286 消耗战
BZOJ - 3611 大工程
CF613D Kingdom and its Cities
BZOJ - 3572 世界树
Size Balanced Tree
Treap
无旋式 treap 的核心操作
分裂(split)
合并(merge)
将 treap 包装成为 set
count 函数
insert 函数
erase 函数
旋转 treap
Splay
简介
结构
二叉查找树的性质
节点维护信息
操作
基本操作
旋转操作
Splay 操作
插入操作
查询 x 的排名
查询排名 x 的数
查询前驱
查询后继
删除操作
完整代码
例题
练习题
WBLT
AVL 树
替罪羊树
重构
基本操作
插入
删除
upper_bound
at
前驱后继
线段树套线段树
常见用途
实现原理
空间复杂度
时间复杂度
经典例题
示例代码
相关算法
平衡树套线段树
线段树套平衡树
常见用途
实现原理
空间复杂度
时间复杂度
经典例题
示例代码
相关算法
树状数组套主席树
K-Dtree
可持久化数据结构简介
部分可持久化
完全可持久化
参考
可持久化线段树
主席树
参考
可持久化块状数组
可持久化平衡树
对于无旋 Treap 的提示
思想 / 做法
可持久化操作
可持久化
Split
Merge
Luogu P3835 可持久化平衡树
题目背景
题目描述
输入格式
输出格式
题解简述
推荐的练手题
另外
可持久化字典树
Link Cut Tree
简介
问题引入
动态树问题
从 LCT 的角度回顾一下树链剖分
转向动态树问题
实链剖分
LCT!
- 辅助树
考虑原树和辅助树的结构关系
接下来要用到的变量声明
函数声明
⼀般数据结构函数 (字面意思)
Splay 系函数 (不会多做解释)
新操作
宏定义
函数讲解
PushUp()
PushDown()
Splay() && Rotate()
isRoot()
Access() 
Update()
makeRoot()
Link()
Split()
Cut()
Find()
一些提醒
一些题
Euler Tour Tree
图论
图论部分简介
图的定义
有向边和无向边
图的基本概念
结点的度数
定理 1
定理 2
子图的概念
特殊的图
参考资料
图论基础
图是怎么存的?
直接存边
邻接矩阵
邻接表
前向星
一些跟图有关的定义
路径
简单路径
回路
简单回路
连通
两个点连通
图连通
可达
强连通
弱连通
子图
生成子图
导出子图
边导出子图
连通子图
连通分量
稀疏图
稠密图
完全图
路径的长度
最短路径
图的遍历
在树 / 图上 DFS
树上 DFS
DFS 序列
括号序列
二叉树上 DFS
先序遍历
中序遍历
后序遍历
一般图上 DFS
BFS
树上 BFS
BFS 序列
一般图上 BFS
树基础
有关树的定义
森林
生成树
有根树
无根树
深度
节点的深度
树的深度
父亲
祖先
子节点
兄弟
后代(子孙)
度数
无根树
有根树
叶节点
无根树
有根树
子树
特殊的树
只有一个节点
菊花
二叉树
满二叉树
完全二叉树
如何存树
存父亲
邻接表
最近公共祖先
定义
性质
求法
朴素算法
倍增算法
Tarjan 算法
转化为 RMQ 问题
树链剖分
动态树
标准 RMQ
DFS 序
树的其他问题
树的重心
定义
性质
求法
参考
树链剖分
树链剖分的思想及能解决的问题
例题 luogu P2590 ZJOI2008 树的统计
一些定义
解法
完整代码
时间复杂度证明
练习
树分治
动态树分治
有向无环图
定义
性质
判定
拓扑排序
定义
Kahn 算法
时间复杂度
实现
DFS 算法
合理性证明
参考
最小生成树
定义
Kruskal 算法
证明
实现
“集合” 数据结构的一种实现
Prim 算法
证明
实现
最小生成树小结
最小生成树题目
最小生成树的唯一性
次小生成树
第 k 小生成树
最短路
定义
性质
Floyd 算法
实现
应用
Bellman-Ford 算法
实现
应用
队列优化:SPFA
SPFA 的优化之 SLF
Dijkstra 算法
实现
不同方法的比较
拓展:分层图最短路
模板题:JLOI2011 飞行路线
差分约束
常用变形技巧
例题 luogu P1993 小 K 的农场
例题 P4926 1007 倍杀测量者
Bellman-Ford 判负环代码实现
习题
k 短路
强连通分量
简介
Tarjan 算法
定义
DFS 树的性质
实现
Kosaraju 算法
实现
Garbow 算法
应用
推荐题目
双连通分量
简介
定义
DFS
DFS 找桥并判断边双联通
DFS 找割点并判断点双联通
割点和桥
割点
如何实现?
例题
Code
割边
实现
2-SAT
定义
现实意义
常用解决方法
Tarjan SCC 缩点
爆搜
爆搜模板
例题
HDU3062 Party
练习题
欧拉图
二分图
定义
性质
判定
应用
二分图匹配
最大匹配
最大权匹配
一般图匹配
最小环
问题
暴力解法
Dijkstra
Floyd
例题
网络流简介
浅谈网络流基础
网络流基础知识以及解法
流量
最大流
最小费用最大流 (MCMF)
最大流解法锦集
Edmond-Karp 动能算法(EK 算法)
Dinic
ISAP
最小费用最大流解法
网络流基础知识拓展
最小割
二分图匹配
建模
网络流拆点
例题 经典问题 结点有流量限制的最大流
例题 luogu P4568 飞行路线
最大流
最小割
费用流
上下界网络流
计算几何
计算几何部分简介
二维计算几何基础
0. 前置技能
1. 图形的记录
1.1. 点
1.2. 向量
1.3. 线
1.3.1. 直线与射线
1.3.2. 线段
1.4. 多边形
1.5. 曲线
2. 基本公式
2.1. 正弦定理
2.2. 余弦定理
3. 基本操作
3.1. 判断一个点在直线的哪边
3.2. 快速排斥实验与跨立实验
3.3. 判断一点是否在任意多边形内部
3.3.1. 光线投射算法 (Ray casting algorithm)
3.3.2. 回转数算法 (Winding number algorithm)
3.4. 求两条直线的交点
3.5. 求任意多边形的周长和面积
3.5.1. 求任意多边形的周长
3.5.2. 求任意多边形的面积
3.6. 圆与直线相关
3.6.1. 求直线与圆的交点
3.6.2. 求两圆交点
3.7. 极角序
4. 代码编写注意事项
三维计算几何基础
Pick 定理
三角剖分
凸包
扫描线
旋转卡壳
半平面交
计算几何杂项
杂项
杂项简介
这个板块主要介绍的是一些难以分类的实用算法、实用技巧
非传统题
CDQ 分治
引子
CDQ 分治解决和点对有关的问题
三维偏序
例题 [CQOI2011]动态逆序对
2 CDQ 分治优化 1D/1D 动态规划的转移
例题[SDOI2011] 拦截导弹
需要 CDQ 将动态问题转化为静态问题的题
矩形加矩形求和
[Ynoi2016]镜中的昆虫
[HNOI2010]城市建设
莫队算法
普通莫队算法
概述
形式
实现
排序方法
模板
复杂度分析
例题 & 代码
带修改
特点
例题
树上莫队
爬山算法
简介
实现
代码
劣势
分数规划
习题
模拟退火
简介
实现
模拟退火算法描述
如何退火(降温)?
代码
习题
朱刘算法
矩阵树定理
本篇记号声明
无向图情况
有向图情况
定理叙述
BEST 定理
例题
注释
随机增量法
随机化
离线处理
距离
OI 中常用的几类距离
曼哈顿距离
切比雪夫距离
欧几里得距离 (又称欧氏距离)
L_m 距离
汉明距离
字节顺序
小端序
大端序
惯例
复杂度
渐进符号
符号
O 符号
符号
常见性质
主定理 (Master Theorem)
均摊复杂度
势能分析
读入、输出优化
关闭同步 / 解除绑定
std::ios::sync_with_stdio(false)
tie
代码实现
读入优化
原理
代码实现
输出优化
原理
代码实现
更快的读入 / 输出优化
参考
离散化
简介
实现
树上启发式合并
引入
算法内容
复杂度
大致代码
运用
练习题
参考资料 / 扩展阅读
OI Wiki.pdf version: 18.12-874a2f8 OI Wiki Team 2018 年 11 ⽉ 30 ⽇
iii 前⾔ 声明 OI Wiki 致⼒于成为⼀个免费开放且持续更新的知识整合站点,⼤家可以在这⾥获取关于 编程竞赛 (compet- itive programming) 有趣⼜实⽤的知识,我们为⼤家准备了竞赛中的基础知识、常⻅题型、解题思路以及常⽤⼯ 具等内容,帮助⼤家更快速深⼊地学习编程竞赛。 建议访问 https://oi-wiki.org 以阅读持续更新的内容。 OI Wiki 除了代码部分均采⽤ (Creative Commons BY-SA 4.0) 知识共享署名 - 相同⽅式共享 4.0 国 际许可协议 及附加的 The Star And Thank Author License 进⾏许可。换⾔之,使⽤过程中您可以⾃由地共 享、演绎,但是必须署名、以相同⽅式共享、分享时没有附加限制,⽽且需要为 GitHub 仓库 点赞(Star)。 OI Wiki 源于社区,提倡 知识⾃由,在未来也绝不会商业化,将始终保持独⽴⾃由的性质。 在编写过程中,作者听取了⼤量同学的意⻅和观点,并尽可能地将各种观点统⼀在项⽬的框架下。但是我们并不 能保证内容中没有对其他组织的误解或偏⻅,⽽内容的正确性也没有经过权威审查。我们亦⽆⼒确认⼿册是否违反了 读者所在地的各种法规,或是⼿册内容是否会对读者⾝⼼健康产⽣不良影响。对于未经授权的传播⽽产⽣的各种问题, 我们概不负责。 如果您有任何问题或建议,可以通过 Github Issues,讨论群,或发邮件到 hi@oi-wiki.org 来联络我们。 欢迎⼀起来完善 OI Wiki!
iv 致谢 很荣幸在此感谢那些帮助我们的⼈们。 我们要感谢 CTF Wiki,本项⽬是受他们启发。另外在编写过程中我们参考了诸多资料,在此也⼀并致谢。 Ir1d, LeoJacob, 和 MingqiHuang 制作了这个 Pdf。 ⾮常感谢⼀起完善 OI Wiki 的 ⼩伙伴们,他们充满感染⼒的精⼒和热情给了这个项⽬极⼤的⽀持: saffah, wangyisong1996, Xeonacid, greyqz, hsfzLZH1, abc1763613206, cjsoft, frank- xjh, i-Yirannn, Planet6174, MingqiHuang, Zhoier, LuoshuiTianyi, Anguei, Mosa-Linking, ACodreamer, CBW2007, dsy031120, HeRaNO, StudyingFather, stevebraveman, Steaunk, billchenchina, AndrewWayne, Dev-XYS, interestingLSY, Chrogeek, yeguanghao, LeoJacob, cesonic, Dev- jqe, siger-young, ChungZH, HXLLL, JulieSigtuna, SysConKonn, Ycrpro, pw384, wjy-yy, konnyakuxzy, Yukimaikoriya, ZhangBo1191, juicymio, Kewth, NiroBC, ShadowsEpic, Xarfa, goldimax, ksyx, s0cks5, wangchong, ywwywwyww, cqnuljs, Alpha1022, 2997ms, Konano, SkqLiao, zj713300, Siej, yjl9903, kzoacn, saotomeku, cutekibry, henrytbtrue, qq1010903229, qq2964, shadowice1984, AljcC, DeepThink1, cquptEthan, FTYC919, Frankaiyou, GldHkkowo, BalanceUhen, lushl9301, Enter-tainer, MingqiHuang@yandex.com, NeverBehave, Too-Naive, VirtualHawthorn, WaterWan, sailordiary, Yukimaikoriya, Zhaoyangzhen, evrmji, gryzhmq, pretend-fal, sunqingyanstc, akakw1。 图 1: Contributors 另外,也要特别感谢 24OI 的朋友们的⼤⼒⽀持! 最后,感谢董⼩姐,让这⼀切成为可能。
⽬录 1 简介 1.1 欢迎来到 OI Wiki。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OI 赛制简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 1.2.1 赛事介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NOIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 省选 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NOI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . APIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CTSC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IOI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 赛制介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . OI 赛制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IOI 赛制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ICPC 赛制 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Codeforces (CF) 赛制 . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 其他国家和地区的 OI 竞赛 . . . . . . . . . . . . . . . . . . . . . . . . . 美国:USACO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 波兰:POI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 克罗地亚:COCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ⽇本:JOI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 台湾地区:資訊奧林匹亞競賽 . . . . . . . . . . . . . . . . . . . . . . . . 俄罗斯:ROI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 加拿⼤:CCC & CCO . . . . . . . . . . . . . . . . . . . . . . . . . . . . 法国与澳⼤利亚:FARIO . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4 其它⼤洲级 OI 竞赛 . . . . . . . . . . . . . . . . . . . . . . . . . . . . BalticOI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . BalkanOI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CEOI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nordic Olympiads in Informatics (NOI) . . . . . . . . . . . . . . . . 1.3 学习资源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 在线测试 (训练) 平台 . . . . . . . . . . . . . . . . . . . . . . . . . . . 国内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 国外 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 教程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 5 5 5 5 5 5 6 6 6 6 6 6 7 7 i
ii 1.6.3 Arbiter 1.3.3 书籍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.4 ⼯具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 题集 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 常⻅错误 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 常⻅技巧 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.6 评测⼯具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ⽬录 8 8 9 9 9 9 1.6.1 Cena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.6.2 Lemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ⾃⾏编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 数据格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 使⽤⽅法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 注意事项,槽点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 ⾃定义校验器的编写 . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 测评时注意事项 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 诶我怎么只能看⻅代码不能看⻅每个点得多少分 . . . . . . . . . . . . . . . . 15 诶这个测评系统好难看 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 诶怎么测提交答案题啊 . . . . . . . . . . . . . . . . . . . . . . . . . . 15 诶这个测评系统有没有漏洞 . . . . . . . . . . . . . . . . . . . . . . . . 15 吐槽 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.6.4 CCR-Plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.7 编辑⼯具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.7.1 Vim – 编辑器之神 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 历史与争端 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 编译 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 基础篇 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 插⼊模式 (insert) . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 普通模式 (normal) . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 命令⾏模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 可视模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 插件篇 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ⽂件管理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 美化界⾯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 启动界⾯ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ⼩⽅便性插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 配置篇 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 基础设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 快捷键设置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 写代码好⽤的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 关于插件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 关于⾼效编辑的建议 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 1.7.2 Visual Studio Code - 微软家的编辑器 . . . . . . . . . . . . . . . . . . 26 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
⽬录 1.8 1.9 iii WSL (Windows 10) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 1.8.1 0x01 引⾔ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 1.8.2 0x02 准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 1.8.3 0x04 基础配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 更换为国内软件源 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 安装中⽂环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 安装编译环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 1.8.4 0x05 进阶操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 安装图形环境,并使⽤远程桌⾯连接 . . . . . . . . . . . . . . . . . . . . . . 32 1.8.5 0x09 延伸内容 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 后记 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Special Judge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.9.1 Testlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 1.9.2 Lemon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 1.9.3 Cena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 1.9.4 CCR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.9.5 Arbiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.9.6 HUSTOJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 1.9.7 QDUOJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.9.8 LibreOJ(SYZOJ 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.10 Testlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 1.11 关于本项⽬ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 2 基础部分 41 2.1 基础部分简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.2 枚举 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.2.1 给出解空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 2.2.2 减少枚举的空间 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.2.3 选择合适的枚举顺序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.3 模拟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 2.4 递归 & 分治 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 2.4.1 递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 递归三要素 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 递归式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 递归出⼝ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 界函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 递归模板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 递归优化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.4.2 分治 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.5 贪⼼ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.5.1 常⻅做法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.5.2 证明⽅法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2.5.3 排序法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 2.5.4 后悔法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
iv ⽬录 code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 2.6 排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.1 稳定性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.2 时间复杂度 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.3 冒泡排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 2.6.4 归并排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 逆序对 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 2.6.5 快速排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 STL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 线性找第 k ⼤的数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.6.6 计数排序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.6.7 排序的应⽤ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.7 表达式求值 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 2.7.1 递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 2.7.2 ⾮递归 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 2.7.3 习题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.8 ⼆分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 2.8.1 ⼆分搜索 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 STL 的⼆分查找 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 2.8.2 三分法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.8.3 分数规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 ⼆分法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Dinkelbach 算法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2.9 构造 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.10 前缀和 & 差分 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 2.10.1 前缀和 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 参考 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.11 ⽂件操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.11.1 ⽂件的概念 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.11.2 ⽂件的操作步骤 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 2.11.3 freopen 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 命令格式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 参数说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 使⽤⽅法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 模板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 2.11.4 C 的 ifstream/ofstream ⽂件输⼊输出流 . . . . . . . . . . . . . . . . 58 使⽤⽅法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 模板 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3 搜索 61 3.1 搜索部分简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
分享到:
收藏