0
点赞
收藏
分享

微信扫一扫

二分查找(binary_search)

知年_7740 2022-04-23 阅读 60
c++算法

整数二分

int bs(int a[],int l,int r){//binary_search
    while(l<r){
        int mid=l+r>>1;
        if(check(mid))l=mid;
        else r=mid-1;
    }
    return l;
}
int bs(int a[],int l,int r){//binary_search
    while(l<r){
        int mid=l+r>>1;
        if(check(mid))l=mid+1;
        else r=mid;
    }
    return l;
}

实数二分 

double bs(double l,double r){
    while(r-l>1e-8){
        double mid=(l+r)/2; 
        if(check(mid))l=mid;
        else r=mid; 
    }
    return l;
}

例题 

P1024 [NOIP2001 提高组] 一元三次方程求解

#include<bits/stdc++.h>
using namespace std;
double a,b,c,d,ans=-101;
inline double f(double x){
    return a*pow(x,3)+b*pow(x,2)+c*x+d;
}
int main(){
    cin>>a>>b>>c>>d;
    for(double x=-100;x<=99;x+=1){//查找区间[x,x+1)
        if(f(x)*f(x+1)<=0){
            double l=x,r=x+1,mid=(l+r)/2;
            while(abs(f(mid))>1e-6){
                mid=(l+r)/2;
                if(f(mid)*f(l)<=0)r=mid;
                else l=mid;
            }
            if(abs(l-ans)>=1){
                printf("%.2lf ",l);
                ans=l;
            }//防止重复输出
        }
    }
}

 

举报

相关推荐

0 条评论