2026山西省信息学竞赛真题:二分答案解析
📘 省赛冲刺特训|2026 年「全国中学生信息学奥林匹克竞赛(山西赛区)」报名已于 9 月 1 日启动、9 月 30 日截止,后续衔接 CSP-J/S 与 NOIP。二分答案是复赛与省赛的高频考点——它把「求最小 / 最大满足条件值」的问题,用「猜测 + 验证」压成 O(N·logS) 的稳解法。今天用一道原创真题拆解它。
一、题目背景
读书节要把 N 本书运到展区,第 i 本书重量为 w[i]。运输必须按书的原始顺序装船,每艘船所载书的重量之和不能超过船的载重 W。组委会最多只能派出 M 艘船。请回答:在所有书都能运完的前提下,船的最小载重 W 是多少?
输入:书的数量 N、最多船数M、重量数组w[1..N];输出:满足条件的最小整数载重 W;约定:单本书重量不超过任何合理船载重,且一定能运完。
二、样例
输入:N=5, M=3,重量 w=[4, 8, 1, 5, 6]
输出:11(载重 11 时,3 艘船分别装 [4,8]、[1,5]、[6],恰好运完;载重 10 时需要 4 艘,不满足)。
三、二分答案思路拆解
核心观察:船载重 W 越大,所需船数越少——这是典型的单调性。于是我们不必逐个试 W,而是:
- 定上下界
:下界 L = max(w)(单本书至少得装下),上界R = sum(w)(极端情况 1 艘船全装); - 写判定函数
ok(W):贪心顺次装船,当前船加下一本书不超 W 就装,否则开新船;统计船数是否 ≤ M; - 二分
:当 ok(mid)为真,说明 mid 可能偏大,令R = mid;否则令L = mid+1;直到L==R即为最小可行载重。
四、C++ 参考代码
五、Python 参考代码
六、复杂度与边界
时间 O(N·logS),S 为重量总和量级,判定函数每次 O(N);空间 O(N)存重量;边界:单本书就可能超过平均分配,故下界必须取 max(w)而非 0;mid用L+(R-L)/2防溢出;重量用long long防累加越界。
七、考点拆解(7 点)
- 答案的单调性
:载重越大船数越少,这是二分答案成立的根本; - 判定与求解分离
:把「求最值」转成「判定可行性」,是二分答案的套路核心; - 贪心验证
:顺次装船统计船数,正确性来自「每段越短越省船」; - 上下界设定
:下界 max(w)、上界 sum(w),漏掉任一边都会错; - 二分写法
: while(L<R)+mid=L+(R-L)/2+ 收敛到 L==R; - 整数与溢出
:重量用 64 位,mid 防溢出; - 对拍验证
:用「从小到大枚举 W 找首个可行」的暴力法对拍 5000 组随机数据,双解完全一致。
八、动手练一练
把样例改成 w=[3, 2, 7, 4, 5], M=2,最小载重是多少?再试试 M=3 会变成几?欢迎在评论区贴出你的运行结果,下期拆解「二分答案 + 前缀和」的进阶变体。
📚 免费少儿编程资料(夸克网盘领取)
以下资料来自夸克网盘分享。个人号链接暂不支持直接点击,请长按或复制下方链接,打开夸克网盘 App / 网页粘贴即可保存:
1. 全国青少年信息素养大赛复赛集训题目Python&C++.docx https://pan.quark.cn/s/93995d3cb150 2. 2024信息素养-智能算法应用挑战赛-复赛初中组题目7月7日.pdf https://pan.quark.cn/s/da97b5dbf75d 3. Python背记手册.pdf https://pan.quark.cn/s/7568ae9ca92b 4. Python课程 https://pan.quark.cn/s/a94bf02d00c6 5. 2024信息素养大赛图形化复赛集训题答案3-9 https://pan.quark.cn/s/6ccab7ec3cbc 6. 2025年03月份电子学会考级真题 https://pan.quark.cn/s/4403c4228912 7. 2025全国青少年信息素养大赛赛项说明 https://pan.quark.cn/s/d9d0df4a9f29 8. 青少儿信息素养大赛编程资料 https://pan.quark.cn/s/4ab6bd83be8a
资料持续更新,关注本号第一时间获取新分享。