zoukankan      html  css  js  c++  java
  • 二分与三分

    二分与三分

    一:二分

      在一个单调有限的区间上找一个值,每一次分左右两部分,判断是在左右哪两个区间,并及时调整上下界,直至找到了目标元素,就如他的名字一样,二分,不断把数据分成两半

      但是对于解决实数类的问题,通常需要一个精确值,避免死循环

    二:二分写法

      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 }
    View Code

      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 }
    View Code

    三:二分的常见模型

      1.二分答案

        最小值最大(最大值最小)

      2.二分查找

        单调数列中求排名,位置

      3.代替三分

    四:典型例题

      1.愤怒的牛

        (1).例题

        (2).思路

        (3).伪代码

      2.Best Cow Fences

        (1).例题

        (2).思路

        (3).伪代码

    五:三分

    六;上级练习

     未完待续~~~

  • 相关阅读:
    判断是否IPv6网络
    Makefile使用库
    Makefile编译
    Makefile编译库
    lua定义一个简单的类
    c++ 注册类到 lua
    redis的安装
    yield return的作用
    使用boost的asio,io_service无法初始化
    apache+php+mysql的配置(转载)
  • 原文地址:https://www.cnblogs.com/SeanOcean/p/10976503.html
Copyright © 2011-2022 走看看