二分笔记

来源:互联网 发布:linux 实现文件服务器 编辑:程序博客网 时间:2024/05/04 23:48

二分就是其实就是不断二分查找答案的过程,将二分的区间分成两部分,一部分为满足条件的,一步分为不满足条件的。对于答案是整数类型的
这里写图片描述
比如求满足x>=k的最小的x那么就要选l,求满足x>k的最小的x就要选r。其中r-1=l。
对于求满足x<=k的最大的x那么就要选r,求满足x

void solve(){        int l=左边界减一点,r=右边界加一点;        while(r-l>1){                int mid=(l+r)/2;                if(can(mid)) l=mid;                else r=mid;        }        //printf("%d\n",根据题意);}

但是有的时候题中需要的是一个小数,这个时候循环结束的条件和输出结果也会略有不同。

void solve(){        double l=,r=;        for(int i=0;i<100;i++){//这里循环足够多的次数以保证精度                double mid=(l+r)/2;                if(can(mid)) l=mid;                else r=mid;        }        printf("%d\n",(int)(r*100 + 0.5));//由于这里的精度已经很高了,所以输出l和r的效果是一样的}
0 0
原创粉丝点击