From 83d653ccb524f9b49d008009297066a2bfe785e3 Mon Sep 17 00:00:00 2001 From: Ir1d Date: Sat, 8 Sep 2018 11:01:58 +0800 Subject: [PATCH] style: add text for block with no language-flags --- docs/dp/index.md | 2 +- docs/ds/heap.md | 4 ++-- docs/ds/virtual-tree.md | 4 ++-- docs/graph/mst.md | 6 +++--- docs/graph/shortest-path.md | 8 ++++---- docs/graph/topo.md | 2 +- docs/intro/editors.md | 48 ++++++++++++++++++++++----------------------- docs/intro/faq.md | 18 +++++++++-------- docs/intro/judgers.md | 2 +- docs/math/crt.md | 2 +- docs/misc/io.md | 2 +- docs/search/bfs.md | 2 +- docs/search/dfs.md | 2 +- docs/search/idastar.md | 6 +++--- docs/search/iterative.md | 2 +- docs/string/hash.md | 2 +- docs/string/match.md | 2 +- 17 files changed, 58 insertions(+), 56 deletions(-) diff --git a/docs/dp/index.md b/docs/dp/index.md index 890d1952..7ee38324 100644 --- a/docs/dp/index.md +++ b/docs/dp/index.md @@ -236,7 +236,7 @@ $dp[i] = \min(dp[j] + cost[j][i])$ 相当于仅有三个操作的带权编辑距离。 -``` +```text copy : 1 replace : -1 insert : -2 diff --git a/docs/ds/heap.md b/docs/ds/heap.md index 4e82e6bd..18eb3d2d 100644 --- a/docs/ds/heap.md +++ b/docs/ds/heap.md @@ -110,7 +110,7 @@ down(x) { 从根开始,按 BFS 序进行. -``` +```text build_heap_1() { for (i = 1; i <= n; i++) up(i); } @@ -126,7 +126,7 @@ build_heap_1() { 这时换一种思路,从叶子开始,逐个向下调整 -``` +```text build_heap_2() { for (i = n; i >= 1; i--) down(i); } diff --git a/docs/ds/virtual-tree.md b/docs/ds/virtual-tree.md index a6f4569f..48e75226 100644 --- a/docs/ds/virtual-tree.md +++ b/docs/ds/virtual-tree.md @@ -22,7 +22,7 @@ ### Sample Input -```plain +```text 10 1 5 13 1 9 6 @@ -41,7 +41,7 @@ ### Sample Output -```plain +```text 12 32 22 diff --git a/docs/graph/mst.md b/docs/graph/mst.md index 029669f0..e8c86653 100644 --- a/docs/graph/mst.md +++ b/docs/graph/mst.md @@ -45,7 +45,7 @@ 我们先啥都不管,假设已经实现了这个数据结构…… (伪代码) -``` +```text for (edge(u, v, len) in sorted(edges)) { a = find_set(u), b = find_set(v); if (a != b) merge(a, b); @@ -59,7 +59,7 @@ for (edge(u, v, len) in sorted(edges)) { 那么让我们模拟一下: 先上数据: -``` +```text 4 5 1 2 2 1 3 2 @@ -196,7 +196,7 @@ merge:$O(n)$,需要将一个集合中的所有元素移到另一个集合中 Fib 堆:$O(n \log n + m)$。 (伪代码) -``` +```text H = new heap(); for (i = 1; i <= n; i++) H.insert(i, inf); H.decrease_key(1, 0); diff --git a/docs/graph/shortest-path.md b/docs/graph/shortest-path.md index 40b7db92..e86d2210 100644 --- a/docs/graph/shortest-path.md +++ b/docs/graph/shortest-path.md @@ -90,7 +90,7 @@ $relax$ 是从哪里来的呢? Bellman-Ford 算法如下: -```pseudocode +```text while (1) for each edge(u, v) relax(u, v); ``` @@ -112,7 +112,7 @@ while (1) for each edge(u, v) relax(u, v); 总时间复杂度 $O(NM)$。 **(对于最短路存在的图)** -``` +```text relax(u, v) { dist[v] = min(dist[v], dist[u] + edge_len(u, v)); } @@ -145,7 +145,7 @@ for (i = 1; i < n; i++) { 那么我们用队列来维护“哪些结点可能会引起 $relax$”,就能只访问必要的边了。 -``` +```text q = new queue(); q.push(S); in_queue[S] = true; @@ -204,7 +204,7 @@ IPA: /ˈdikstrɑ/ 或 /ˈdɛikstrɑ/。 第二步,考虑每次加进来的结点,到他的最短路,上一步必然是第一个集合中的元素(否则他不会是第二个集合中的最小值,而且有第一步的性质),又因为第一个集合已经全部 $relax$ 过了,所以最短路显然确定了。 -``` +```text H = new heap(); H.insert(S, 0); dist[S] = 0; diff --git a/docs/graph/topo.md b/docs/graph/topo.md index 768c522f..eab4a279 100644 --- a/docs/graph/topo.md +++ b/docs/graph/topo.md @@ -30,7 +30,7 @@ 伪代码: -``` +```text bool toposort() { q = new queue(); for (i = 0; i < n; i++) diff --git a/docs/intro/editors.md b/docs/intro/editors.md index ea4db6d4..f2b89e5e 100644 --- a/docs/intro/editors.md +++ b/docs/intro/editors.md @@ -81,7 +81,7 @@ g++ filename.cpp -o filename #### 普通模式(normal) Vim 的命令大部分都是在普通模式下完成的,普通模式下可不能乱按,可以说每个键都是命令。 -``` +```text 首先是 hjkl 四个方向键。 k ^ h < > l @@ -99,7 +99,7 @@ Vim 的命令大部分都是在普通模式下完成的,普通模式下可不 然后就是更快的跳跃了。如果说只是使用 `hjkl` 的话,光标的移动显然不够快,而鼠标却又要伸手去拿。Vim 提供了普通模式下更快的跳跃方法,`w` 可以跳到下个单词的开头,而 `e` 可以跳到当前单词结尾,`0` 可以跳至行首,`$` 可以跳至行尾,岂不是快多了?而且 `w`,`e`,`0`,`$` 还可以用于许多命令中 `de`,`dw`,`d0`,`d&` 分别对应删至单词尾,删至下个单词头,删至行首,删至行尾。以及`y`命令亦可同理。 然后是 Vim 的可重复。在输入某个命令前,输入一个数字的话,就会重复那么多次。如在普通模式下: -``` +```text asdasdasdasdasd asdadasdddd asdasdasd @@ -150,7 +150,7 @@ vimtutor 首先,其实从前插件的安装必须下载之后丢到 .vim 文件夹中,删了又要下云云,十分麻烦。于是在使用者们的捣鼓下,一枚强大的插件管理器由此诞生——Vundle。 当然你的配置里必须有如下两行: -``` +```text set nocompatible filetype plugin on ``` @@ -189,7 +189,7 @@ vim . 或者在 Vim 中使用 `e .` 来开启插件 当然,如果仅是如此还不够,使用文件管理器打开文件的话,容易使工作目录出现差错,从而导致编译的程序不存在于原文件夹中,所以你的配置文件中还需以下语句: -``` +```text set autochdir ``` 它的作用是会自动把工作目录移动到当前编辑文件所在目录。 @@ -238,20 +238,20 @@ Vim 的配置语法没那么麻烦,基本上就是 set 开启选项,call xxx 我必须说我的配置里其实没有背景方面的设置,因为我黑背景加个透明化很舒服了……接下来我会挑重要的配置来讲,剩下的可以结合我的配置内的注释来看 首先使用各种插件容易与 vi 的模式产生冲突,所以我们要关闭 vi 的功能,那么就有了如下配置: -``` +```text set nocompatible ``` 通过这个设置将关闭原有 vi 的功能以防冲突 随后,当你打开你的 cpp 文件时,你会发现及其之丑,因为没有了语法高亮,一切都是一个颜色了。那么配置中需加入如下两行 -``` +```text syntax enable syntax on ``` 分别是开启高亮支持与开启语法高亮 然后是我们可爱的状态栏,`set laststatus=2` 这行配置将会使得状态栏总是显示,而状态栏所显示的信息在配置中是可以设置的。设置如下: -``` +```text set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==\"\"?&enc:&fenc).(&bomb?\",BOM\":\"\")}]\ %c:%l/%L%) ``` 这一行会使状态栏显示包括文件路径,模式,文件类型,文件编码,所在行数与列数,以及光标所在处是文件的百分之多少。加上 airline 插件,既美观又实用。 @@ -267,7 +267,7 @@ set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ [%{(&fenc==\"\"?& 那个 `zsh` 是一个 shell 的相关程序,有兴趣的可以查查,没兴趣的删掉吧QwQ。 还有一件事,就是文件编码,设置如下: -``` +```text set langmenu=zh_CN.UTF-8 set helplang=cn set termencoding=utf-8 @@ -277,26 +277,26 @@ set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030 #### 快捷键设置 其实 Vim 普通模式下没有多少按键是"自由身",那么用户该如何定制自己的快捷键呢?Vim 为此提供了 leader 键来服务。leader 键在配置中由自己定制,只需要短短一行 -``` +```text let mapleader = "" ``` 双引号之间就是你自己定义的 leader 键啦。 设置快捷键怎么写呢? -``` +```text nnoremap 快捷键 指令 inoremap 快捷键 指令 ``` 两行分别代表了在普通模式下和插入模式下的快捷键执行指令。当然指令不用想多了,没有什么语法,就是相当于在键盘上按你指令中写下的键而已…… 首先我的个人快捷键需求其实不是很多,我的 leader 键是 `,但是处于一种坐冷板凳的状态,就更新插件的时候用一用,不过还是很方便的,我的设置是: -``` +```text nnoremap i :PluginInstall ``` ``代表回车。设置之后只需要连续按 ``i 即可更新插件,很方便。 那么你有没有猜到如何利用配置写出括号补全的部分功能呢?没错,就是利用快捷键。将插入模式下的左扩号当做快捷键即可,指令就是`()`。如果补全后要使光标在括号里怎么办呢?如果仔细观察你就会发现每当退出插入模式,光标总是会向后跳一个字符,我们可以利用这一点,组合 `Esc + i` 不就变成了向前一个字符进行插入吗?总结下来配置如下: -``` +```text inoremap ( ()i inoremap [ []i inoremap " ""i @@ -305,7 +305,7 @@ inoremap ' ''i 当然我的配置里没有,而且我也不用括号补全插件,其实原因是因为我希望我的撤销树会更合理与好看。你会发现,括号补全为了使光标回到括号内,已经退出了一次插入模式,那么撤销命令的效果就不完整了。而且其实插入模式下使用方向键,也相当与推出插入模式移动又重新回到插入模式,也会使撤销树不完整= =。所以你会发现进阶篇提到的,我的配置里那个丧心病狂的东西…… 还记得进阶篇里的分屏吗?显然使用鼠标点击来选择活动窗口太慢,而移动命令前加个Ctrl+w也不习惯对不对,所以我的做法是用Ctrl+移动命令来映射前面的按键组合。 -``` +```text nnoremap h nnoremap l nnoremap j @@ -314,7 +314,7 @@ nnoremap k 应该比原来的按法好记也好按……吧…… 还记得自动折行吧,我们的`hjkl`命令其实都是在实际行之间移动,而折下来的屏幕行实在是没法子,只能用 `l` 键不断移过去。但实际上,`g + 移动命令` 便能够使你在屏幕行间移动,因为考虑到这种移动的常用,我选择将`g+移动命令`与移动命令反过来映射。 -``` +```text noremap j gj noremap gj j noremap gk k @@ -326,13 +326,13 @@ noremap k gk F9一键编译 我想有了之前的编译命令,基础篇命令行模式中的介绍,你应该大概能有个思路了吧。作出的操作肯定如下: -``` +```text :w 保存 :g++ xxx.cpp -o xxx 编译 :./xxx 运行 ``` 那么如何实现呢?我倾向于写个函数: -``` +```text nnoremap :call CompileRunGcc() func! CompileRunGcc() exec "w" @@ -347,7 +347,7 @@ func! CompileRunGcc() clear ``` 来清屏,不过我倾向于也把它封装在一个快捷键内,按 F12 就会自动清屏了,个人觉得用着挺爽…… -``` +```text nnoremap :call Clss() func! Clss() exec '!clear' @@ -355,7 +355,7 @@ func! Clss() ``` 还有,在 Vim 中执行外部命令纵使有 `:!` 的方法,其实还是不方便,要是能直接在 Vim 中再打开一个终端就好了,对吧。Vim 从 8.0 之后就增添了在内部分个屏来打开一个终端的功能,命令是 `:terminal`。我个人也将它设置成了快捷键,作为强迫症还是装在了函数中= =。我想有了命令你应该自己会写了。 -``` +```text nnoremap :call Term() func! Term() exec 'terminal' @@ -364,7 +364,7 @@ func! Term() 按F8就能在上面分出一个窗口打开终端了。 介于更各种 Vim 版本的压迫,Vim 作者也是奋发图强,Vim 8.1 又更新了调试程序,先用`packadd termdebug`开启此设置,然后在 Vim 中输入`:Termdebug+编译出的程序名称`即可开始GDB的过程,具体详细操作可以参考[这篇文章](https://fzheng.me/2018/05/28/termdebug/)。这个自然也被我封装函数了>_<。 -``` +```text packadd termdebug nnoremap :call GDB() func! GDB() @@ -383,20 +383,20 @@ func! GDB() #### 关于插件 插件篇中说到了强大的插件管理器 Vundle,那么在配置中该如何写呢?框架如下: -``` +```text set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin('~/.vim/自己创建的用来放插件文件的文件夹') call vundle#end() ``` 在两块之间来写需要安装的插件,格式如下: -``` -Plugin '作者 Github 上的名字/Github 上的插件文件夹名' +```text +Plugin '作者 Github 上的名字/Github 上的插件仓库名' ``` 写完保存后进入 Vim,使用 `:PluginInstall` 即可自动开始安装。 我的插件列表: -``` +```text set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin('~/.vim/plugged') @@ -421,7 +421,7 @@ call vundle#end() 关于插件其实也有相关配置,但是都写在一起将会使得 `.vimrc` 十分臃肿,我们可以额外写在别的文件里,一般文件应该保存在 `home` 下,然后在配置中写下 `source $HOME/文件路径` 即可。我的 nerdtree, syntastic 和 airline 都额外写了别的文件。 同时我的配置里关于插件的快捷键如下: -``` +```text F10 :启动 nerdtree 侧边工程目录树 F7 :启动 Gundo 时光机 ``` diff --git a/docs/intro/faq.md b/docs/intro/faq.md index 805d0016..b97bec61 100644 --- a/docs/intro/faq.md +++ b/docs/intro/faq.md @@ -98,7 +98,7 @@ Telegram 群组链接为 [@OIwiki](https://t.me/OIwiki) , QQ 群号码为 [`58 推荐在 hosts 文件中加入如下几行:(来源: [@GoogleHosts](https://github.com/googlehosts/hosts/blob/master/hosts-files/hosts#L481-L485)) -``` +```text ## GitHub Start 192.30.253.118 gist.github.com 192.30.253.112 github.com @@ -161,9 +161,11 @@ pip install -U -r requirements.txt 如果是行间公式(用的 `$$`),目前已知的问题是需要在 `$$` 两侧留有空行。格式如下: -``` +```text // 空行 -$$ a_i $$ +$$ +a_i +$$ // 空行 ``` @@ -177,19 +179,19 @@ $$ a_i $$ 比如: -``` +```text copyright: SATA ``` 注:默认的是 ‘CC BY-SA 4.0 和 SATA’ -### 如何给一个页面关闭字数统计 +### 如何给一个页面关闭字数统计 (现已默认关闭) 参考 [Metadata](https://squidfunk.github.io/mkdocs-material/extensions/metadata/#usage) 的使用,在页面开头加一行即可。 比如: -``` +```text pagetime: ``` @@ -205,13 +207,13 @@ pagetime: 如果现在想要避免目录中出现双倍公式,可以参考 https://github.com/24OI/OI-wiki/blame/master/docs/string/sam.md#L82 -``` +```text ### 结束位置 ``` 在目录中会变成 -``` +```text 结束位置 endpos ``` diff --git a/docs/intro/judgers.md b/docs/intro/judgers.md index 294005c7..7d02785c 100644 --- a/docs/intro/judgers.md +++ b/docs/intro/judgers.md @@ -33,7 +33,7 @@ cd .. 首先打开 lemon 选择新建试题,而后打开新建试题的文件夹 题目和数据应该如以下格式所示 -``` +```text ├── data │ ├── gendata.py │ ├── product diff --git a/docs/math/crt.md b/docs/math/crt.md index 3c02ee86..2f76e793 100644 --- a/docs/math/crt.md +++ b/docs/math/crt.md @@ -42,7 +42,7 @@ $$ ### 伪代码 -```plain +```text 1 → n 0 → ans for i = 1 to k diff --git a/docs/misc/io.md b/docs/misc/io.md index 10c4bd69..97e1ed45 100644 --- a/docs/misc/io.md +++ b/docs/misc/io.md @@ -137,7 +137,7 @@ char getchar() { 注意 `fread` 必须使用文件读入,但是 `fwrite` 不需要。 参考代码: -``` +```text namespace io { const int MAXSIZE = 1 << 22; inline char gc() { diff --git a/docs/search/bfs.md b/docs/search/bfs.md index 589ded0e..1f061f4e 100644 --- a/docs/search/bfs.md +++ b/docs/search/bfs.md @@ -15,7 +15,7 @@ BFS 全称是 [Breadth First Search](https://en.wikipedia.org/wiki/Breadth-first 伪代码: -``` +```text bfs(s) { q = new queue() q.push(s)), visited[s] = true diff --git a/docs/search/dfs.md b/docs/search/dfs.md index 2d72b8b5..27a6c142 100644 --- a/docs/search/dfs.md +++ b/docs/search/dfs.md @@ -9,7 +9,7 @@ dfs 全称是 [Depth First Search](https://en.wikipedia.org/wiki/Depth-first_sea 伪代码: -``` +```text dfs(u) { visited[u] = true for each edge(u, v) { diff --git a/docs/search/idastar.md b/docs/search/idastar.md index 37e4ed42..2c3366e4 100644 --- a/docs/search/idastar.md +++ b/docs/search/idastar.md @@ -7,7 +7,7 @@ IDA\*,即采用迭代加深的 A\* 算法。相对于 A\* 算法,由于 IDA\ **大致框架**(伪代码): -``` +```text Procedure IDA_STAR(StartState) Begin PathLimit := H(StartState) - 1; @@ -53,13 +53,13 @@ end; 输入样例: -```plain +```text 495 499 ``` 输出样例: -```plain +```text Case 1: 495/499=1/2+1/5+1/6+1/8+1/3992+1/14970 ``` diff --git a/docs/search/iterative.md b/docs/search/iterative.md index eeaab489..5268a6af 100644 --- a/docs/search/iterative.md +++ b/docs/search/iterative.md @@ -11,7 +11,7 @@ 首先设定一个较小的深度作为全局变量,进行 DFS。每进入一次 DFS,将当前深度 $d++$,当发现 $d$ 大于设定的深度就返回。如果在搜索的途中发现了答案就可以回溯,同时在回溯的过程中可以记录路径。如果没有发现答案,就返回到函数入口,增加设定深度,继续搜索。 ## 代码结构 -``` +```text IDDFS(u,d) if d>设定深度 return diff --git a/docs/string/hash.md b/docs/string/hash.md index 4497bf12..d92f63cd 100644 --- a/docs/string/hash.md +++ b/docs/string/hash.md @@ -34,7 +34,7 @@ Hash 的核心思想在于,暴力算法中,单次比较的时间太长了, 伪代码: -``` +```text match_pre(int n) { exp[0] = 1; for (i = 1; i < n; i++) { diff --git a/docs/string/match.md b/docs/string/match.md index 0b6dd745..2a75efa9 100644 --- a/docs/string/match.md +++ b/docs/string/match.md @@ -22,7 +22,7 @@ (伪代码) -``` +```text match(char *a, char *b, int n, int m) { ans = new vector(); for (i = 0; i < n - m + 1; i++) { -- 2.11.0