二分答案
0.2
目录
基本概念
二分答案是对答案用二分的方式进行枚举,通过缩小范围逐步逼近答案,是一种高效的枚举方式,主要有二分小数及二分整数两种.通常体现为”最 值最 “.在实际做题时不一定严格二分,三分甚至更多分都可以.
在二分时,要注意r的范围,如果过大,会引起不必要的时间消耗.一般不用理论最大值,即整数最大总和,根据估算推断一下,实在不放心可以在读入数据是处理一下(有些题目要求比较严格,r的值就不能超出给定范围).
判断函数是二分的主要考点,在编写时注意即时成立和即时错误的退出判定,在累加时通常将初始值设为1(默认至少有一种情况成立).
二分整数
实现模版
- ans是二分的结果,根据判断条件决定是’l-1’还是’r+1’.值得注意的是两种情况并不一定相同,一般根据判断函数的关系,正确返回的那个作为结果.
bool ju(int s);
int l=0,r=10000000;
while(l<=r)
{
int mid=l+r>>1;
ju(mid)?r=mid-1:l=mid+1;
}
printf("%d\n",ans);
例题讲解
- P1316 存在性问题.只要达到B直接退出,注意一下高精度.
- P1396 二分最短路入门,二分一下拥挤度
- p2920 排序二分,贪心一下
- p2183 小于直接扔,算个数
- p1902 二分搜索