Unverified Commit e1d0c643 authored by Shuhao Zhang's avatar Shuhao Zhang Committed by GitHub
Browse files

Merge pull request #9 from 24OI/master

sync 2019.5.22
parents 3e096461 74ea8d5d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -80,7 +80,7 @@ int find(int x) {
    if (check(mid))           //如果可行
      l = mid;                //升高锯片高度
    else
      r = mid;  //否则降低片高度
      r = mid;  //否则降低片高度
  }
  return l;  //返回左边值
}
+2 −2
Original line number Diff line number Diff line
@@ -22,9 +22,9 @@

样例二已经暴露了此题的本质~~(复读机~~

显然 $n,n-1,n(n-1)$ 为一组合法解。特殊地,当 $n=1$ 时,无解。
显然 $n,n+1,n(n+1)$ 为一组合法解。特殊地,当 $n=1$ 时,无解,这是因为 $n+1$ 与 $n(n+1)$ 此时相等

至于构造思路是怎么产生的,大概就是观察样例加上一点点数感了吧。此题对于数学直觉较强的人来说并不难
至于构造思路是怎么产生的,大概就是观察样例加上一点点数感了吧。此题对于数学直觉较强的人来说并不难

### Example 2

+5 −3
Original line number Diff line number Diff line
@@ -183,9 +183,7 @@ LeetCode 有递归专题练习,[点这里去做题](https://leetcode.com/explo

### 递归优化

先来一道例题:[三连击](https://www.luogu.org/problemnew/show/P1618)

这道题朴素的递归写法只能得到 25 分,因为递归次数太多,所以超时。
比较 naive 的递归实现可能递归次数太多,容易超时。

怎么优化呢?详见[搜索优化](/search/optimization)[记忆化搜索](/dp/memo/)

@@ -215,3 +213,7 @@ void merge_sort(一个数组) {
好了,这个算法也就这样了,完全没有任何难度。记住之前说的,相信函数的能力,传给他半个数组,那么这半个数组就已经被排好了。而且你会发现这不就是个二叉树遍历模板吗?为什么是后序遍历?因为我们分治算法的套路是 **分解 -> 解决(触底) -> 合并(回溯)** 啊,先左右分解,再处理合并,回溯就是在退栈,就相当于后序遍历了。至于`merge`函数,参考两个有序链表的合并,简直一模一样。

LeetCode 上有分治算法的专项练习,[点这里去做题](https://leetcode.com/tag/divide-and-conquer/)



本文主要贡献者:[fudonglai](https://github.com/fudonglai)
 No newline at end of file
+1 −1
Original line number Diff line number Diff line
@@ -86,6 +86,6 @@ int calc(const std::string &s) { // 计算转换好的后缀表达式

## 习题

1.  [表达式求值(NOIP2013)](https://www.luogu.org/problemnew/show/P1981)
1.  [表达式求值(NOIP2013)](https://vijos.org/p/1849)
2.  [后缀表达式](https://www.luogu.org/problemnew/show/P1449)
3.  [Transform the Expression](https://www.spoj.com/problems/ONP/)
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@

有些题的排序方法非常显然,如 [Luogu P1209 [USACO1.3]修理牛棚 Barn Repair](https://www.luogu.org/problemnew/show/P1209) 就是将输入数组差分后排序模拟求值。

然而有些时候很难直接一下子看出排序方法,比如 [Luogu P1080 国王游戏](https://www.luogu.org/problemnew/show/P1080) 就很容易凭直觉而错误地以 $a$ 或 $b$ 为关键字排序,过样例之后提交就发现 WA 了 QAQ。一个~~众所周知的~~常见办法就是尝试交换数组相邻的两个元素来 **推导** 出正确的排序方法。我们假设这题输入的俩个数用一个结构体来保存
然而有些时候很难直接一下子看出排序方法,比如 [NOIP 2012 国王游戏](https://vijos.org/p/1779) 就很容易凭直觉而错误地以 $a$ 或 $b$ 为关键字排序,过样例之后提交就发现 WA 了 QAQ。一个~~众所周知的~~常见办法就是尝试交换数组相邻的两个元素来 **推导** 出正确的排序方法。我们假设这题输入的俩个数用一个结构体来保存

```cpp
struct {
Loading