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 这道题我也调试了半天,就是不对,很离谱。一堆题解都不是这样写的,让我很怀疑人生