poj 2456 二分法 最大化最小值

2014-11-24 12:43:44 · 作者: · 浏览: 4

重新练习下二分法,发现还是手速不够

从这道题学到一下几点:

1、线性分几段的方法,看我的Judge()代码;

2、二分的while()最终打印的是down,而不是mid(我代码里写的是ans),或者up,

这么想:跳出循环的时候,假设while里的判断,Judge(ans)==1,那么down是正确解,up不是

Judge(ans)==0,那么ans跟up都不是正确解

综上,打印down才能输出正确解

3、调了好一会二才发现的bug:Judge函数里,if(cnt

贴代码:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; const int MAXN = 100000+10; int n,c; int dis[MAXN]; int Judge(int s) { int cnt=0,last=0,now=0; while(now
      
       1) { ans=(up+down)/2; if(Judge(ans))down=ans; else up=ans; } printf(%d ,down);//  ans  } }