Loading docs/dp/memo.md +3 −3 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ int main() { 然后? 开个数组 $mem$ , 记录下来每个 $dfs(pos,tleft)$ 的返回值。刚开始把 $mem$ 中每个值都设成 $-1$ (代表没访问过). 每次刚刚进入一个 dfs 前(我们的 dfs 是递归调用的嘛), 都检测 $mem[pos][tleft]$ 是否为 $-1$ , 如果是就正常执行并把答案记录到 $mem$ 中,否则? 开个数组 $mem$ , 记录下来每个 $dfs(pos,tleft)$ 的返回值。刚开始把 $mem$ 中每个值都设成 $-1$ (代表没访问过)。每次刚刚进入一个 dfs 前(我们的 dfs 是递归调用的嘛),都检测 $mem[pos][tleft]$ 是否为 $-1$ , 如果是就正常执行并把答案记录到 $mem$ 中,否则? **直接返回 $mem$ 中的值!** Loading Loading @@ -116,7 +116,7 @@ int main() { #### 总结一下记忆化搜索是啥: - 不依赖任何**外部变量** - 答案以返回值的形式存在,而不能以参数的形式存在(就是不能将 dfs 定义成 $dfs(pos ,tleft , nowans )$ , 这里面的 nowans 不符合要求). - 答案以返回值的形式存在,而不能以参数的形式存在(就是不能将 dfs 定义成 $dfs(pos ,tleft , nowans )$ , 这里面的 nowans 不符合要求)。 - 对于相同一组参数,dfs 返回值总是相同的 * * * Loading Loading @@ -211,7 +211,7 @@ int main() { - 记忆化搜索可以避免搜到无用状态,特别是在有状态压缩时 举例:给你一个有向图(注意不是完全图), 经过每条边都有花费,求从点 1 出发,经过每个点**恰好一次**后的最小花费(最后不用回到起点), 保证路径存在。 举例:给你一个有向图(注意不是完全图),经过每条边都有花费,求从点 1 出发,经过每个点**恰好一次**后的最小花费(最后不用回到起点),保证路径存在。 dp 状态很显然: Loading docs/ds/dividing.md +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ end; 那我们先扯一下主席树的内容。在用主席树求区间第 $K$ 小的时候,我们以 $K$ 为基准,向左就向左,向右要减去向左的值,在划分树中也是这样子的。 查询难理解的,在于**区间缩小**这种东西。下图,我查询的是 $3$ 到 $7$ , 那么下一层我就只需要查询 $2$ 到 $3$ 了。当然,我们定义 $left,right$ 为缩小后的区间(目标区间), $l,r$ 还是我所在节点的区间。那为什么要标出目标区间呢?因为那是**判定答案在左边,右边的基准**。 查询难理解的,在于**区间缩小**这种东西。下图,我查询的是 $3$ 到 $7$ , 那么下一层我就只需要查询 $2$ 到 $3$ 了。当然,我们定义 $left,right$ 为缩小后的区间(目标区间), $l,r$ 还是我所在节点的区间。那为什么要标出目标区间呢?因为那是**判定答案在左边,右边的基准**。  Loading docs/ds/persistent-balanced.md +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ Split-Merge Treap 如果把 Treap 变为非旋转的,我们发现可以通过可持久化**Merge**和**Split**操作就可以完成可持久化。 「一切可支持操作都可以通过**Merge****Split****Newnode****Build**完成」,而**Build**操作只用于建造无需理会,**Newnode**(新建节点)就是用来可持久化的工具。 「一切可支持操作都可以通过**Merge\*\***Split\***\*Newnode\*\***Build**完成」,而**Build**操作只用于建造无需理会,**Newnode\*\*(新建节点)就是用来可持久化的工具。 我们来观察一下**Merge**和**Split**,我们会发现它们都是由上而下的操作! Loading docs/ds/stl/bitset.md +2 −2 Original line number Diff line number Diff line Loading @@ -53,6 +53,6 @@ 一般来讲,我们可以用 `bitset` 优化一些可行性 DP, 或者线筛素数 ( `notprime` 这种 `bool` 数组可以用 `bitset` 开到 $10^8$ 之类的) 它最主要的作用还是压掉了内存带来的时间优化, $\frac{1}{32}$ 的常数优化已经可以是复杂度级别的优化了,比如一个 $N = 1000$ 的 $O(N^3)$ 算法, $10^9$ 显然很卡,在常数大一点的情况下必然卡不过去,**O(松)不能算!!!!**, 这时候如果我们某一维除以 32, 则可以比较保险的过了这道题 它最主要的作用还是压掉了内存带来的时间优化, $\frac{1}{32}$ 的常数优化已经可以是复杂度级别的优化了,比如一个 $N = 1000$ 的 $O(N^3)$ 算法, $10^9$ 显然很卡,在常数大一点的情况下必然卡不过去,**O(松)不能算!!!**, 这时候如果我们某一维除以 32, 则可以比较保险的过了这道题 其实 `bitset` 不光是一个容器,更是一种思想,我们可以通过手写的方式,来把 `long long` 什么的压成每 bit 表示一个信息,用 STL 的原因更多是因为它的运算符方便 docs/intro/resources.md +3 −3 Original line number Diff line number Diff line Loading @@ -14,12 +14,12 @@ - [Judge Duck Online](https://duck.ac/)(松松松的 OJ,精确到 $\mu s$ ) - [JoyOI](http://www.joyoi.cn/)(原 Tyvj) - [LibreOJ](https://loj.ac/) - [洛谷](https://www.luogu.org/) (常用 OJ,现代 OJ 支持发布比赛等很多功能) - [洛谷](https://www.luogu.org/)(常用 OJ,现代 OJ 支持发布比赛等很多功能) - [牛客网](https://www.nowcoder.com/) - [OpenJudge](http://openjudge.cn/) - [POJ](http://poj.org/) (PKU OJ,国内历史最悠久的 OJ 之一,很多英文题,有一些基础题和好题) - [POJ](http://poj.org/)(PKU OJ,国内历史最悠久的 OJ 之一,很多英文题,有一些基础题和好题) - [PTA - 拼题 A](https://pintia.cn/) - [Universal Online Judge](http://uoj.ac/) (VFK 的 OJ,多原创比赛题和 CCF/THU 题 难度较高) - [Universal Online Judge](http://uoj.ac/)(VFK 的 OJ,多原创比赛题和 CCF/THU 题 难度较高) - [Vijos](https://vijos.org/) - [Virtual Judge](https://vjudge.net/)(可以方便的在 Vjudge 上提交别的 OJ 的题,尤其是一些国内不太方便的 OJ) - [ZOJ](http://acm.zju.edu.cn/onlinejudge/)(浙大) Loading Loading
docs/dp/memo.md +3 −3 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ int main() { 然后? 开个数组 $mem$ , 记录下来每个 $dfs(pos,tleft)$ 的返回值。刚开始把 $mem$ 中每个值都设成 $-1$ (代表没访问过). 每次刚刚进入一个 dfs 前(我们的 dfs 是递归调用的嘛), 都检测 $mem[pos][tleft]$ 是否为 $-1$ , 如果是就正常执行并把答案记录到 $mem$ 中,否则? 开个数组 $mem$ , 记录下来每个 $dfs(pos,tleft)$ 的返回值。刚开始把 $mem$ 中每个值都设成 $-1$ (代表没访问过)。每次刚刚进入一个 dfs 前(我们的 dfs 是递归调用的嘛),都检测 $mem[pos][tleft]$ 是否为 $-1$ , 如果是就正常执行并把答案记录到 $mem$ 中,否则? **直接返回 $mem$ 中的值!** Loading Loading @@ -116,7 +116,7 @@ int main() { #### 总结一下记忆化搜索是啥: - 不依赖任何**外部变量** - 答案以返回值的形式存在,而不能以参数的形式存在(就是不能将 dfs 定义成 $dfs(pos ,tleft , nowans )$ , 这里面的 nowans 不符合要求). - 答案以返回值的形式存在,而不能以参数的形式存在(就是不能将 dfs 定义成 $dfs(pos ,tleft , nowans )$ , 这里面的 nowans 不符合要求)。 - 对于相同一组参数,dfs 返回值总是相同的 * * * Loading Loading @@ -211,7 +211,7 @@ int main() { - 记忆化搜索可以避免搜到无用状态,特别是在有状态压缩时 举例:给你一个有向图(注意不是完全图), 经过每条边都有花费,求从点 1 出发,经过每个点**恰好一次**后的最小花费(最后不用回到起点), 保证路径存在。 举例:给你一个有向图(注意不是完全图),经过每条边都有花费,求从点 1 出发,经过每个点**恰好一次**后的最小花费(最后不用回到起点),保证路径存在。 dp 状态很显然: Loading
docs/ds/dividing.md +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ end; 那我们先扯一下主席树的内容。在用主席树求区间第 $K$ 小的时候,我们以 $K$ 为基准,向左就向左,向右要减去向左的值,在划分树中也是这样子的。 查询难理解的,在于**区间缩小**这种东西。下图,我查询的是 $3$ 到 $7$ , 那么下一层我就只需要查询 $2$ 到 $3$ 了。当然,我们定义 $left,right$ 为缩小后的区间(目标区间), $l,r$ 还是我所在节点的区间。那为什么要标出目标区间呢?因为那是**判定答案在左边,右边的基准**。 查询难理解的,在于**区间缩小**这种东西。下图,我查询的是 $3$ 到 $7$ , 那么下一层我就只需要查询 $2$ 到 $3$ 了。当然,我们定义 $left,right$ 为缩小后的区间(目标区间), $l,r$ 还是我所在节点的区间。那为什么要标出目标区间呢?因为那是**判定答案在左边,右边的基准**。  Loading
docs/ds/persistent-balanced.md +1 −1 Original line number Diff line number Diff line Loading @@ -16,7 +16,7 @@ Split-Merge Treap 如果把 Treap 变为非旋转的,我们发现可以通过可持久化**Merge**和**Split**操作就可以完成可持久化。 「一切可支持操作都可以通过**Merge****Split****Newnode****Build**完成」,而**Build**操作只用于建造无需理会,**Newnode**(新建节点)就是用来可持久化的工具。 「一切可支持操作都可以通过**Merge\*\***Split\***\*Newnode\*\***Build**完成」,而**Build**操作只用于建造无需理会,**Newnode\*\*(新建节点)就是用来可持久化的工具。 我们来观察一下**Merge**和**Split**,我们会发现它们都是由上而下的操作! Loading
docs/ds/stl/bitset.md +2 −2 Original line number Diff line number Diff line Loading @@ -53,6 +53,6 @@ 一般来讲,我们可以用 `bitset` 优化一些可行性 DP, 或者线筛素数 ( `notprime` 这种 `bool` 数组可以用 `bitset` 开到 $10^8$ 之类的) 它最主要的作用还是压掉了内存带来的时间优化, $\frac{1}{32}$ 的常数优化已经可以是复杂度级别的优化了,比如一个 $N = 1000$ 的 $O(N^3)$ 算法, $10^9$ 显然很卡,在常数大一点的情况下必然卡不过去,**O(松)不能算!!!!**, 这时候如果我们某一维除以 32, 则可以比较保险的过了这道题 它最主要的作用还是压掉了内存带来的时间优化, $\frac{1}{32}$ 的常数优化已经可以是复杂度级别的优化了,比如一个 $N = 1000$ 的 $O(N^3)$ 算法, $10^9$ 显然很卡,在常数大一点的情况下必然卡不过去,**O(松)不能算!!!**, 这时候如果我们某一维除以 32, 则可以比较保险的过了这道题 其实 `bitset` 不光是一个容器,更是一种思想,我们可以通过手写的方式,来把 `long long` 什么的压成每 bit 表示一个信息,用 STL 的原因更多是因为它的运算符方便
docs/intro/resources.md +3 −3 Original line number Diff line number Diff line Loading @@ -14,12 +14,12 @@ - [Judge Duck Online](https://duck.ac/)(松松松的 OJ,精确到 $\mu s$ ) - [JoyOI](http://www.joyoi.cn/)(原 Tyvj) - [LibreOJ](https://loj.ac/) - [洛谷](https://www.luogu.org/) (常用 OJ,现代 OJ 支持发布比赛等很多功能) - [洛谷](https://www.luogu.org/)(常用 OJ,现代 OJ 支持发布比赛等很多功能) - [牛客网](https://www.nowcoder.com/) - [OpenJudge](http://openjudge.cn/) - [POJ](http://poj.org/) (PKU OJ,国内历史最悠久的 OJ 之一,很多英文题,有一些基础题和好题) - [POJ](http://poj.org/)(PKU OJ,国内历史最悠久的 OJ 之一,很多英文题,有一些基础题和好题) - [PTA - 拼题 A](https://pintia.cn/) - [Universal Online Judge](http://uoj.ac/) (VFK 的 OJ,多原创比赛题和 CCF/THU 题 难度较高) - [Universal Online Judge](http://uoj.ac/)(VFK 的 OJ,多原创比赛题和 CCF/THU 题 难度较高) - [Vijos](https://vijos.org/) - [Virtual Judge](https://vjudge.net/)(可以方便的在 Vjudge 上提交别的 OJ 的题,尤其是一些国内不太方便的 OJ) - [ZOJ](http://acm.zju.edu.cn/onlinejudge/)(浙大) Loading