关于二分的问题。。

P1462 通往奥格瑞玛的道路

cloudemakers @ 2023-09-06 18:07:08

我看题解使用不包含mid的二分过了 这样不是可能漏解吗?所以应该怎么写?


by 我是一个小号 @ 2023-09-06 18:45:13

哪篇题解使用了不包含mid的二分?


by cloudemakers @ 2023-09-07 12:50:34

@我是一个小号

    while(l<=r){
        c=work(mid);
        if(c){//如果可以的话 
            r=mid-1;
            mid=(l+r)>>1;
         }
        else{
            l=mid+1;
            mid=(l+r)>>1;
         }
     }

第二篇这个不是吗?


by 我是一个小号 @ 2023-09-07 18:57:47

@cloudemakers 看不见里面的mid吗???


by cloudemakers @ 2023-09-08 12:47:17

@我是一个小号 mid这个值不是取不到吗 蓝书上说的


by 我是一个小号 @ 2023-09-08 19:25:26

@cloudemakers 不理解你的问题。这不是等效于

    while(l<=r){
        mid=(l+r)>>1;
        c=work(mid);
        if(c){//如果可以的话 
            r=mid-1;
         }
        else{
            l=mid+1;
         }
     }

by qzmoot @ 2023-10-02 21:11:51

@我是一个小号 楼主的意思是mid为正确的答案,但是每次l=mid+1,r=mid-1所以都取不到mid的值,最后输出l不一定对


by qzmoot @ 2023-10-02 21:14:51

@cloudemakers 正确应该是:

while(l<r)
{
  int mid=(l+r)>>1;
 if(check(mid))
    r=mid;
    else
      l=mid+1;
}

by cloudemakers @ 2023-10-03 12:49:17

@qzmoot 感谢!然而被hack掉了(我再去查查


by qzmoot @ 2023-10-03 14:25:59

@cloudemakers 这道题我也调试了半天,就是不对,很离谱。一堆题解都不是这样写的,让我很怀疑人生


|