diff --git a/OnlineJudges/poj/2456.cpp b/OnlineJudges/poj/2456.cpp new file mode 100644 index 0000000..4c79822 --- /dev/null +++ b/OnlineJudges/poj/2456.cpp @@ -0,0 +1,22 @@ +#include +#include +int n, m, a[100005]; +bool check(int d) +{ + int cow = 0, nxt = 0; + for (int i = 0; i < n; i++) + if (a[i] >= nxt) + cow++, nxt = a[i] + d; + return cow >= m; +} +int main() +{ + scanf("%d%d", &n, &m); + for (int i = 0; i < n; i++) scanf("%d", a + i); + std::sort(a, a + n); + int L = 0, R = 0x3f3f3f3f, mid; + while (L < R) + check(mid = (L + R) >> 1) ? L = mid + 1 : R = mid; + printf("%d", L - 1); + return 0; +} \ No newline at end of file diff --git a/省选准备/assets/day7/poj2456.cpp b/省选准备/assets/day7/poj2456.cpp new file mode 100644 index 0000000..4c79822 --- /dev/null +++ b/省选准备/assets/day7/poj2456.cpp @@ -0,0 +1,22 @@ +#include +#include +int n, m, a[100005]; +bool check(int d) +{ + int cow = 0, nxt = 0; + for (int i = 0; i < n; i++) + if (a[i] >= nxt) + cow++, nxt = a[i] + d; + return cow >= m; +} +int main() +{ + scanf("%d%d", &n, &m); + for (int i = 0; i < n; i++) scanf("%d", a + i); + std::sort(a, a + n); + int L = 0, R = 0x3f3f3f3f, mid; + while (L < R) + check(mid = (L + R) >> 1) ? L = mid + 1 : R = mid; + printf("%d", L - 1); + return 0; +} \ No newline at end of file diff --git a/省选准备/省选基础算法.pdf b/省选准备/省选基础算法.pdf index d366c5c..1dcd862 100644 Binary files a/省选准备/省选基础算法.pdf and b/省选准备/省选基础算法.pdf differ diff --git a/省选准备/省选基础算法.tex b/省选准备/省选基础算法.tex index c220d15..884f0af 100644 --- a/省选准备/省选基础算法.tex +++ b/省选准备/省选基础算法.tex @@ -505,7 +505,10 @@ Manacher 模板题 \subparagraph{二分答案} 最小值最大(或是最大值最小)问题,这类双最值问题常常使用二分法求解,也就是确定答案后,配合贪心或DP等其他算法来检验这个答案是否合法,将最优化问题转变为判定性问题。例如:将长度为$n$的序列$a_i$分成最多$m$个连续段,求所有分法中每段和的最大值最小能是多少。 \subparagraph{二分查找} - 具有单调性的布尔表达式求解分界点,比如在有序数列中求解数字 x 的排名。 + 具有单调性的布尔表达式求解分界点,比如在有序数列中求解数字$x$的排名。 \subparagraph{二分导数代替三分} 有时对于一些单峰函数,我们可以通过二分导函数的方法求解函数极值,这样使用时通常定义域为整数域比较方便,因为此时$dx$可以直接取整数$1$。 +\subparagraph{二分的例题} 我讨厌奶牛。 +\codeinput[\href{http://poj.org/problem?id=2456}{POJ2456} - Aggressive cows]{assets/day7/poj2456.cpp} + 你看,这次的答案就是\verb|L - 1|。 \end{document} \ No newline at end of file