解题思路
要把 n 根绳子切成至少 k 段、每段长度相同,段与段之间不能拼接。求每段能达到的最大整数长度。题目保证长度为 1 一定切得够。
- 答案 L 越大,每根绳子能切出的段数 ⌊ai/L⌋ 越少,所以「能否切出至少 k 段」对 L 是单调的,可以二分 L。
- 二分范围是 [1,maxai]。对某个 mid,累加 ⌊ai/mid⌋,一旦达到 k 就说明 mid 可行,继续试更长;否则把上界缩小。
- 段数之和最大约 n⋅maxai=1014,比较时要用 64 位整数,不要用 int 累加。
- 常见假解:用浮点长度再四舍五入;把绳子拼起来再切;二分写成开区间漏掉 1 或 maxai;累加溢出变成负数导致误判。