1 条题解

  • 0
    @ 2026-8-10 13:50:08

    CJBS04|木料等长切割 题解

    核心算法

    二分答案,寻找最大的可行段长。

    思路推导

    给定段长 L>0L>0,第 ii 根木料能提供 ai/L\lfloor a_i/L\rfloor 段。若总段数至少为 kk,则 LL 可行;更短的长度也一定可行。可行性随 LL 增大呈“真到假”的单调变化。

    维护 left 为可行值、right 为不可行值。初始 left=0right=max(a)+1,不断用中点缩小边界。

    正确性说明

    由于任意可行长度的更小值也可行,答案集合是连续整数区间 [0,answer][0,answer]。循环始终保持 left 可行、right 不可行;结束时二者相邻,因此 left 正是最大的可行整数。

    复杂度

    • 每次检查:O(n)O(n)
    • 二分次数:O(logmaxai)O(\log \max a_i)
    • 总时间:O(nlogmaxai)O(n\log \max a_i)
    • 额外空间:O(1)O(1)

    易错点

    • mid=0 时不能做除法,因此只在 left+1<right 时取正中点;
    • 段数之和可能很大,应使用 long long 并在达到 kk 后提前停止;
    • 题目要求“至少 kk 段”,多切出的段不影响可行性;
    • 不可行时答案为 0
    • 1

    信息

    ID
    CJBS04
    时间
    2000ms
    内存
    256MiB
    标签
    递交数
    1
    已通过
    1
    上传者