### 我之前没怎么用过 Github
-参与 Wiki 的编写 **需要** 一个 Github 账号, **不需要** 高超的 Github 技巧。
+参与 Wiki 的编写 ** 需要 ** 一个 Github 账号, ** 不需要 ** 高超的 Github 技巧。
举个栗子,假如我想要修改一个页面内容,应该怎么操作呢?
### 我之前用过 Github
-基本协作方式如下
+基本协作方式如下:
+
1. Fork 主仓库到自己的仓库中。
2. 当想要贡献某部分内容时,请务必仔细查看 **Issue**,以便确定是否有人已经开始了这项工作。当然,我们更希望你可以加入 QQ / Telegram 群组,方便交流。
-3. 在决定将内容推送到本仓库时,**请你首先拉取本仓库代码进行合并,自行处理好冲突,同时确保在本地可以正常生成文档**,然后再将分支 PR 到主仓库的 master 分支上。其中,PR 需要包含以下基本信息
- * 标题:本次 PR 的目的(做了什么工作,修复了什么问题)
- * 内容:如果必要的话,请给出对修复问题的叙述
+3. 在决定将内容推送到本仓库时,** 请你首先拉取本仓库代码进行合并,自行处理好冲突,同时确保在本地可以正常生成文档 **,然后再将分支 PR 到主仓库的 master 分支上。其中,PR 需要包含以下基本信息
+ 标题:本次 PR 的目的(做了什么工作,修复了什么问题)
+ 内容:如果必要的话,请给出对修复问题的叙述
目前,(人员较少),基本上可以忽略 2-3 步,可以直接在 GitHub 网页版进行修改。
### 文档的合理性
-所谓合理性,指所编写的 **内容** 必须具有如下的特性
+所谓合理性,指所编写的 ** 内容 ** 必须具有如下的特性
- 由浅入深,内容的难度应该具有渐进性。
- 逻辑性,对于每类内容的撰写应该尽量包含以下的内容
- 原理,说明该内容对应的原理。
- 例子,给出 1 ~ 2 个典型的例子。
- - 题目,在该标题下, **只需要给出题目名字、题目链接**
+ - 题目,在该标题下, ** 只需要给出题目名字、题目链接 **
### 文档存储的格式
对于每类要编写的内容,对应的文档应该存储在合适的目录下
- images, 存储文档介绍时所使用的图片,位置为所添加的目录下(即格式为 `![](./images/xx.jpg)`)。
-- **文件名请务必都小写,以 `-` 分割, 如 `file-name`**
+- ** 文件名请务必都小写,以 `-` 分割, 如 `file-name`**
## F.A.Q.
Q:现在主要是谁在做这件事啊?感觉这是个大坑,真的能做好吗?
-A:现在主要是一些退役老年选手在做这件事,靠的都是信仰。这种“用爱发电”的事情,困难重重,我们也不知道能不能做好。但是如果这件事能够推动 **OI** 的发展,也是蛮有意义的呢。我们希望在这里打的这个广告,可以帮助这个团队遇见更多志同道合的人。
+A:现在主要是一些退役老年选手在做这件事,靠的都是信仰。这种 “用爱发电” 的事情,困难重重,我们也不知道能不能做好。但是如果这件事能够推动 **OI** 的发展,也是蛮有意义的呢。我们希望在这里打的这个广告,可以帮助这个团队遇见更多志同道合的人。
Q:听说过 nocow 吧,**OI Wiki** 怎么保证我们添加的内容不会像 nocow 那样突然间就不见了呢?
-## 1.前言
+## 1. 前言
### 后缀数组和后缀树
### 各种定义
-`子串`: 就是子串[捂脸]
+` 子串 `: 就是子串 [捂脸]
-`后缀`: 就是从 $i$ 这个位置开始到该字符串的末尾的一个子串
+` 后缀 `: 就是从 $i$ 这个位置开始到该字符串的末尾的一个子串
-`字符串大小`: $a$ 和 $b$ 这两个串,从头开始逐个字符按照ASSIC码进行比较
+` 字符串大小 `: $a$ 和 $b$ 这两个串,从头开始逐个字符按照 ASSIC 码进行比较
-`后缀数组`: $sa[i]$代表该字符串的$len$个后缀中,排名为 $i$ 的后缀是第$sa[i]$个后缀
+` 后缀数组 `: $sa[i]$ 代表该字符串的 $len$ 个后缀中,排名为 $i$ 的后缀是第 $sa[i]$ 个后缀
-`名词数组`: $rank[i]$代表第 $i$ 个后缀排名为$rank[i]$
+` 名词数组 `: $rank[i]$ 代表第 $i$ 个后缀排名为 $rank[i]$
-## 2.一些构造方法
+## 2. 一些构造方法
### 最简单的暴力
-把所有的后缀拆出来,然后sort
+把所有的后缀拆出来,然后 sort
思想较为简单,可自行尝试实现
复杂度是 $O(nlogn)$
-前提是你要先会**基数排序**
+前提是你要先会 ** 基数排序 **
假设我们有这样一个字符串 `aabaaaab`
接着我们以第二个字母为关键字,在首字母有序的基础上进行排序,这个时候,我们把首字母相同的后缀拿出来单看
-对于每一组首字母相同的后缀,首字母是对排序没有影响的,所以可以直接按照第二个字母进行基数排序,同样,对于首字母不同的后缀,由于按照首字母排序时,他们的相对大小已经确定,当按照第二个字母排序时,不会出现`原来a>b,现在b>a`的现象,所以我们可以看成一直在做区域内的排序,这之后变成这样:
+对于每一组首字母相同的后缀,首字母是对排序没有影响的,所以可以直接按照第二个字母进行基数排序,同样,对于首字母不同的后缀,由于按照首字母排序时,他们的相对大小已经确定,当按照第二个字母排序时,不会出现 ` 原来 a>b,现在 b>a` 的现象,所以我们可以看成一直在做区域内的排序,这之后变成这样:
![](images/sa3.png)
这样子我们可以处理这个问题,可是复杂度还是没有到达一个我们可以接受的范围
-所以我们引入**倍增**
+所以我们引入 ** 倍增 **
-当我们按照每个后缀的前 $2^k$个字母进行完排序后,那么我们把后缀的前 $2^{k+1}$看做前后两个 $2^k$,这样我们就可以把这前后两个 $2^k$作为之前说的`首字母`和`第二个字母`了,然后进行上述过程,就可以在 $O(nlogn)$ 的复杂度内处理这个问题了
+当我们按照每个后缀的前 $2^k$ 个字母进行完排序后,那么我们把后缀的前 $2^{k+1}$ 看做前后两个 $2^k$, 这样我们就可以把这前后两个 $2^k$ 作为之前说的 ` 首字母 ` 和 ` 第二个字母 ` 了,然后进行上述过程,就可以在 $O(nlogn)$ 的复杂度内处理这个问题了
```cpp
#include <bits/stdc++.h>
SA ();
for (int i=1;i<=n;i++)
- printf("%d ",sa[i]);
+ printf("%d",sa[i]);
exit(0);
}
```
代码里 $x[i]$ 就是 $rank[i]$
-$y[i]$ :假设 $y[i]=a\ ,\ y[i+1]=b$ 那么在原串中 从$a+2^k$开始的$2^k$个字符组成的子串 **小于等于** 从$b+2^k$开始的$2^k$个字符组成的子串
+$y[i]$ :假设 $y[i]=a\ ,\ y[i+1]=b$ 那么在原串中 从 $a+2^k$ 开始的 $2^k$ 个字符组成的子串 ** 小于等于 ** 从 $b+2^k$ 开始的 $2^k$ 个字符组成的子串
最好理解这个代码时,每一步都结合这基数排序来考虑
-**by 周运沛**
\ No newline at end of file
+**by 周运沛 **
\ No newline at end of file