You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分查找实现问题:求达标所需5分数量未通过全部测试

问题分析

你的代码核心逻辑方向正确,但浮点数精度问题导致极端大数值场景下的判断错误。当a、b、c达到1e15级别时,Python的双精度浮点数无法精确表示所有整数,会出现精度丢失——原本等于3.5的平均值可能被计算为略小于3.5,触发错误分支,最终得到错误结果。初始的提前判断也存在同样的精度隐患。

解决方案

将所有浮点数比较转换为整数运算,彻底避免精度损失。通过数学推导把不等式转换为整数形式:
要求 $\frac{2a + 3b + 4c + 5m}{a + b + c + m} \geq 3.5$
两边同时乘以 $2(a + b + c + m)$(分母为正,不等号方向不变),展开整理后得到整数不等式:
$2(2a + 3b + 4c + 5m) \geq 7(a + b + c + m)$

修正后的代码
def main():
    a, b, c = int(input()), int(input()), int(input())
    total = a + b + c
    current_sum = 2 * a + 3 * b + 4 * c
    
    # 提前判断是否已满足条件(整数运算)
    if 2 * current_sum >= 7 * total:
        print(0)
        return
    
    l = 0
    r = a + b + c + 1  # 足够大的上界
    while l <= r:
        mid = (l + r) // 2
        # 用整数运算替代浮点数比较
        if 2 * (current_sum + 5 * mid) >= 7 * (total + mid):
            r = mid - 1
        else:
            l = mid + 1
    
    print(l)

main()
关键改进点
  • 全部使用整数运算,彻底消除浮点数精度误差。
  • 提前计算total和current_sum,避免重复计算,提升效率。
  • 保留二分法的高效性,同时确保判断逻辑的绝对准确。

内容的提问来源于stack exchange,提问作者perfect05

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:44:53