初赛专题(十):完善程序套路 —— 任务一句话、选项差分与模板互考

本讲定位:完善程序 2 段 × 5 空 × 3 分 = 30 分,是全卷第二大板块,也是最模式化的板块:七年真题(见 cspj-exam-analysis-2019-2025.md)的固定配方是”一段数学/枚举判定 + 一段经典有名算法”,且经典算法段近年向”有名有姓的模板”收敛——押模板的收益在上升。本讲给出一套五步答题法(核心是”任务一句话”和”选项差分”),把常见的空归成四大空型逐型专练,最后按模板清单组织”挖五空互考”训练。

完善程序与阅读程序是一体两面:阅读是”给代码问行为”,完善是”给任务补代码”。第 09 讲的三武器(模拟、不变量、复杂度)在本讲全部反向复用——填完的空要用阅读的方法验收

前置知识:第 09 讲(验收方法)、第 12 讲(递归空型)、第 08 讲(二分模板)、第 11 讲(数论程序)、第 01 讲(STL)。

课时:建议 2 次课。上半:五步法 + 四大空型(第 1~3 节);下半:两段实战 + 模板互考(第 4~6 节)。

适合对象:CSP-J 初赛。标注 ⭐ 的小节为进阶内容,第一遍学习可以跳过。


1. 考情与总策略

1.1 题型

每年 2 段程序,各挖 5 个空,每空是 4 选 1 的单选、3 分,合计 30 分。不需要你从零写代码——只需要在四个高度相似的选项里挑对的那个,这决定了核心技术是”对比选项的差异”而不是”凭空构造代码”。

1.2 七年配方与 2026 预测

段 1(数学/枚举判定) 段 2(经典有名算法)
2019 分形矩阵递归生成 双关键字计数排序
2020 试除法质因数分解 冒泡 + 贪心区间覆盖
2021 约瑟夫数组模拟 矩形计数(枚举+排序+二分)
2022 枚举因数到 $\sqrt n$ BFS flood fill
2023 二分找缺失数 编辑距离 DP
2024 完全平方数判定 汉诺塔递归
2025 RLE 字符串解码 摩尔投票

2026 预测(真题分析 5.4 节):段 1 候选是进制转换实现、质因数分解变形、日期/模拟;段 2 从未考过的待押模板里出,头号候选是栈模拟表达式求值(选择题里前/中/后缀表达式四年三考、铺垫极多,完善程序却七年未出)。本讲两段实战按这两个预测配置。

1.3 一条总心法

空不是孤立的填空题,是一段完整程序里缺的零件。 先弄清整段程序的任务和每个变量的角色,每个空”该干什么”就基本确定了;四个选项再用差异点逐一淘汰。先看空、后读题是本末倒置,也是失分的第一原因。


2. 五步答题法

第一步:读题面,复述任务

用一句话向自己复述:“这段程序读入什么、算什么、输出什么。”圈出数据范围(判断类型和复杂度用)。

第二步:通读代码,跳过空,列”变量角色表”

把空当成”此处省略”,通读一遍,给每个变量标注角色:

cnt —— 计数器;i —— 扫描下标;st —— 存操作数的栈;f[i][j] —— DP 状态(含义一句话)……

变量的角色一旦明确,空的任务就浮出来了。DP 段尤其要先写出 f 的准确含义(第 09 讲实战二的教训:差之毫厘的状态含义是头号陷阱)。

第三步:给每个空写”任务一句话”