二分解题步骤
按照常规的做题顺序,基本上是:
1.先决定要二分的量(通常是题目中要求求解的结果),并考虑二分成的两部分区间有什么含义。
2.找出二分的判断条件,即怎么才能将要二分的量二分成两个部分,通常是一部分满足条件,另一部分不满足条件。
3.寻找判断条件的方法:
一如1227.分巧克力,4956.冶炼金属中,列出相关公式即可得出分段条件;
二如4178.数列分段II中,可以采取假设的方法,假设区间有一点q即为我们要求的最终答案,观察小于q时会是什么情况,大于q时会是什么情况,从而引出判断条件(二方法不是那么好用,比较麻烦————反正在4178.数列分段II中就是比较复杂比较绕)
三如P1824 进击的奶牛中,因为本来二分答案就是对顺序枚举的升级版,也是一种枚举,我们就设当枚举到x时,将x作为一个已知条件,带入到题意中去寻找可以将区间一分为二的判断条件(通常我们会找到一个“a越大(越小),b越小(越大)的规律”,通常a和b有一个是枚举的数值x)(方法三就是方法二的优化版<感觉是>)
注:可以理解“二分答案”是二分的一个典型应用,解题的时候往往会先考虑枚举答案(相当于是为题目增加了一个已知条件),然后检验枚举的值是否正确。若满足单调性,则满足使用二分法的条,把这里的枚举换成二分,就变成了“二分答案”。
二分答案的三种题型
二分答案根据所求的问题可以大体上分为以下三个类别:
①求满足条件的最大(小)值
②最大值最小化问题
③最小值最大化问题
最大值最小化(最小值最大化)
最大值最小化问题就是要求满足某种条件的最大值中最小的可能情况(最大值最小化),首先的想法是先确定最大值可以取到的取值范围,然后从小到大枚举这个作为答案的“最大值”,并去判断是否合法。若范围是单调的,就可以使用二分搜索法来更快地找到答案。
二分模板题
原题链接:AcWing 789. 数的范围
代码展示:代码
经典例题(题解中皆有对二分的见解)
1.冶炼金属
原题链接: AcWing 4956. 冶炼金属
题解: AcWing 4956. 冶炼金属(代码+思路)——二分
2.借教室
原题链接: AcWing 503. 借教室
题解: AcWing 503. 借教室——暴力差分+差分二分(详细思路)
3.分巧克力
原题链接: AcWing 1227. 分巧克力
题解: AcWing 1227. 分巧克力(代码+思路)——二分
4.管道
原题链接 AcWing 5407. 管道
题解: AcWing 5407. 管道——二分答案
5.牛的学术圈I
原题链接: AcWing 3745. 牛的学术圈 I
题解: AcWing 3745. 牛的学术圈 I——二分+双指针
6.机器人跳跃问题
原题链接: AcWing 730. 机器人跳跃问题
题解: AcWing 730. 机器人跳跃问题——有些关于二分的个人理解,希望大家来帮忙指点一二【简单的二分,头一回见到暴long long的题目。。。】
7.数列分段 II(最大值最小化问题)
原题链接: AcWing 4178. 数列分段 II
题解: AcWing 4178. 数列分段 II——最大值最小化
8.进击的奶牛(最小值最大化问题)
原题链接: 洛谷 P1824 进击的奶牛
题解: 洛谷 P1824. 进击的奶牛——最小值最大化