二分与三分
Posted seanocean
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分与三分相关的知识,希望对你有一定的参考价值。
二分与三分
一:二分
在一个单调有限的区间上找一个值,每一次分左右两部分,判断是在左右哪两个区间,并及时调整上下界,直至找到了目标元素,就如他的名字一样,二分,不断把数据分成两半
但是对于解决实数类的问题,通常需要一个精确值,避免死循环
二:二分写法
1.整数定义域上的二分:
1 bool Check(int p) 2 3 return p; 4 5 int Bt(int l,int r) 6 7 int ans=0,mid; 8 while(l<=r) 9 10 mid=(l+r)>>1, 11 Check(mid)?ans=mid,l=mid+1:r=mid-1; 12 13 return ans; 14
2.实数定义域上的二分:
1 double DLT=0.1; 2 bool Check(double p) 3 4 return p; 5 6 int Bt(double l,double r) 7 8 double ans=0,mid; 9 while(r-l>=DLT) 10 11 mid=(r+l)/2.0; 12 Check(mid)?ans=mid,l=mid:l=mid; 13 14
三:二分的常见模型
1.二分答案
最小值最大(最大值最小)
2.二分查找
单调数列中求排名,位置
3.代替三分
四:典型例题
1.愤怒的牛
(1).例题
(2).思路
(3).伪代码
2.Best Cow Fences
(1).例题
(2).思路
(3).伪代码
五:三分
六;上级练习
未完待续~~~
以上是关于二分与三分的主要内容,如果未能解决你的问题,请参考以下文章