本页不是只给题型名称,而是给出“识别方式 + 建模方式 + 程序骨架 + 检查重点”。实际带训时,可以把它当作统一讲评模板。
题型速判表
| 题型 | 题面关键词 | 核心任务 | 常见数据结构 | 首选思路 |
|---|---|---|---|---|
| 复杂计算 | 单价、损耗、换算、总量、成本 | 公式正确、单位一致 | 变量、数组 | 分步换算与累加 |
| 流程模拟 | 依次处理、轮次、步骤、状态变化 | 按规则推进状态 | 列表、队列、状态变量 | 循环模拟 |
| 数据管理 | 记录、表格、清洗、筛选、汇总 | 结构化处理数据 | 字典、列表、结构体 | 标准化 + 聚合 |
| 综合分析 | 排名、评分、等级、建议 | 多指标比较 | 列表、元组、映射 | 计算指标 + 排序 |
| 路径规划 | 节点、路径、距离、运输 | 找最优路线 | 图、邻接表、网格 | BFS、Dijkstra、搜索 |
| 趋势分析 | 时间、变化、增长、均值、窗口 | 发现趋势规律 | 数组、前缀和 | 排序 + 统计窗口 |
| 传播仿真 | 渠道、覆盖、传播、影响 | 模拟扩散过程 | 队列、集合、图 | 分轮传播 |
| 规则决策与资源分配 | 条件、限制、选择、容量、预算 | 在约束下求可行或最优方案 | 数组、DP 表、优先队列 | 贪心、枚举、动态规划 |
复杂计算题
识别特征
- 题面出现多个单位、比例、折算规则或损耗规则。
- 输出通常是总量、总价、总成本、平均值、费用或差值。
- 看起来不像“模拟过程”,而更像“按公式一步一步算出来”。
建模方法
- 先统一单位,再做运算。
- 把题目中的每个名词都落实成变量,不要直接在公式里硬写。
- 多阶段计算时,把中间量命名清楚,例如
raw_cost、loss_amount、final_cost。
程序骨架
- 读入原始参数。
- 做单位转换或比例换算。
- 逐项计算中间结果。
- 汇总成最终答案。
- 按要求格式输出。
常见错误
- 单位未统一,例如千克和克、小时和分钟混算。
- 百分比直接当整数使用,没有除以
100。 - 多轮折损时误写成一次性折损。
- 题目要求四舍五入,但程序使用了截断。
训练建议
- 先做纸笔推导,再写代码。
- 每题至少自己构造 1 个很小的样例,检查手算结果与程序结果是否一致。
- 对每个中间量打印或记录一次,避免整体结果错了却不知道是哪一步出错。
流程模拟题
识别特征
- 题目强调先后顺序、轮次推进、事件触发、状态转移。
- 每一步操作都会改变库存、人数、位置、状态或资源。
- 输出往往是最终状态,也可能是若干关键时刻的状态。
建模方法
- 明确状态变量是什么,例如时间、位置、库存、队列内容、是否完成。
- 明确每一轮的更新顺序,尤其是“先判断还是先更新”。
- 为异常分支单独写逻辑,不要全部塞进一个超长
if。
程序骨架
- 初始化所有状态。
- 进入循环。
- 判断本轮是否满足某个触发条件。
- 按题目顺序更新状态。
- 检查结束条件并输出结果。
常见错误
- 更新顺序错位,例如本该先扣库存再移动,却反过来执行。
- 多个对象共享同一状态变量,导致覆盖。
- 漏掉边界轮次或最后一次更新。
- 异常情况没有单独处理,例如库存不足、路径断开、重复访问。
训练建议
- 用表格列出“轮次、输入、状态变化、输出”。
- 先只模拟 2 到 3 轮,确认过程正确后再写完整代码。
- 对状态变化题一定要保留手工推演记录。
数据管理题
识别特征
- 原始数据格式不统一,需要转换、筛选、去重、排序或汇总。
- 输入像“台账”“名单”“记录流”“表格”。
- 输出多为标准化结果、统计结果或结构化列表。
建模方法
- 先确定每条记录至少有哪些字段。
- 把字段清洗规则写清楚,如去空格、统一大小写、补默认值、转换类型。
- 优先使用字典、列表和结构体组织数据,少用平行数组。
程序骨架
- 读取原始记录。
- 解析字段并校验。
- 标准化数据格式。
- 去重、筛选、分组或聚合。
- 输出最终结果。
常见错误
- 数字字段当字符串排序,导致
100排在20前面。 - 去重依据选错,把本该保留的记录删掉。
- 输出字段顺序与题面要求不一致。
- 清洗规则写了一半,例如去掉前导空格但没有去掉尾部空格。
训练建议
- 先写“单条记录如何转换”的小函数,再写整体流程。
- 测试中要包含脏数据、缺失值、重复记录和极端值。
- 复盘时重点说明“标准化规则”。
综合分析题
识别特征
- 题目需要比较多个对象,给出排序、等级、建议或结论。
- 常见关键词有评分、排名、分级、效率评价、策略建议。
- 通常不是简单求和,而是要先构造指标。
建模方法
- 把每个评价指标写清楚,是越大越好还是越小越好。
- 如果需要综合得分,先明确权重和 tie-break 规则。
- 输出建议时,先写判定条件,再生成文本。
程序骨架
- 读入原始数据。
- 计算单项指标。
- 计算综合分值或等级。
- 排序并处理并列规则。
- 生成建议或结论。
常见错误
- 排序方向写反。
- 并列时缺少第二关键字或第三关键字。
- 等级边界漏写,例如
>= 80和> 80混淆。 - 建议文本与判定条件不一致。
训练建议
- 先手写 3 个对象的比较顺序,再写排序键。
- 对 tie-break 规则单独设计样例。
- 讲评时重点让学生解释“为什么排成这个顺序”。
路径规划与资源调度题
识别特征
- 输入里出现节点、边、坐标、网格、站点、运输路线、运力或容量。
- 题目目标是最短、最少、最低成本、最大覆盖或可行调度。
- 很多题需要先判断“能不能到”,再判断“怎样最优”。
建模方法
- 先确定模型是图、网格还是资源表。
- 路径问题先定义边权:时间、距离、成本或风险。
- 调度问题先定义资源约束:人数、车辆、库存、预算。
程序骨架
- 建图或建立网格。
- 定义代价、容量和限制条件。
- 选择合适算法,如 BFS、Dijkstra、贪心、DP。
- 记录路径或最优值。
- 输出路线、成本或调度方案。
常见错误
- 无权图误用复杂算法,或有权图误用 BFS。
- 访问标记时机错误,导致重复扩展或漏掉更优解。
- 路径存在但容量不满足,程序却误判为可行。
- 只输出最短距离,没有恢复路径。
训练建议
- 先做小图手推。
- 区分“求值”和“恢复方案”两种要求。
- 题后复盘一定要写清楚为什么选 BFS、Dijkstra、贪心或 DP。
趋势分析题
识别特征
- 数据带时间维度,例如天、周、月、阶段。
- 需要找增长、下降、波动、峰值、均值或预测结果。
- 常见做法是排序、滑动窗口、均值、差分或前缀和。
建模方法
- 先按时间排序,确保分析顺序正确。
- 明确需要的是单点比较、相邻差值还是区间统计。
- 如果有缺失值,先决定补零、忽略还是延续上一个值。
程序骨架
- 读入并按时间排序。
- 清洗缺失或异常值。
- 计算窗口统计量或差值。
- 比较趋势并输出结论。
常见错误
- 时间顺序混乱。
- 把总量变化误判为增长率变化。
- 滑动窗口左右边界写错。
- 预测题混淆“延续趋势”和“重新估计”。
训练建议
- 每次分析都要求学生先画一条简单折线草图。
- 先做 5 个点以内的小样例,再处理完整数据。
- 把“原始值、窗口值、结论”分开写出。
传播仿真题
识别特征
- 涉及渠道、节点、受众、覆盖、扩散、转发、影响范围。
- 通常分轮次传播,或按照规则在网络中扩散。
- 输出常是覆盖人数、传播轮数、最终受影响范围。
建模方法
- 把“谁会传播给谁”抽象成图或邻接关系。
- 把“已接收”“可再传播”“不可传播”设计为不同状态。
- 明确传播延迟、次数上限、渠道容量等规则。
程序骨架
- 建立传播网络。
- 初始化起点集合。
- 按轮或按时间推进传播。
- 更新已覆盖节点和可传播节点。
- 汇总传播结果。
常见错误
- 同一节点被重复统计。
- 传播轮次 off-by-one。
- 忽略渠道限制或受众过滤规则。
- 没有区分“已收到但不能继续传”和“已收到且还能传”。
训练建议
- 优先使用队列或集合管理状态。
- 手推时画传播层级图。
- 测试中必须包含重复到达和断点传播两种情况。
规则决策与资源分配题
识别特征
- 题目出现多个条件、预算限制、容量限制、优先级或目标函数。
- 需要在一堆候选方案里选一个可行或最优方案。
- 既可能是简单规则判断,也可能进入贪心或动态规划。
建模方法
- 先把自然语言规则翻译成布尔条件。
- 再判断是可行性问题、最优性问题还是多目标平衡问题。
- 如果对象数量较小,可枚举;如果规模较大,要考虑贪心或 DP。
程序骨架
- 解析约束条件。
- 定义状态或候选方案。
- 枚举、筛选或优化。
- 比较方案优劣。
- 输出最优值和方案说明。
常见错误
- 只检查局部条件,没有检查全局约束。
- 多个条件关系写错,把“且”写成“或”。
- 贪心策略没有证明或验证就直接采用。
- 输出了最优值,却没有输出对应方案。
训练建议
- 先做“小规模全枚举”验证思路。
- 对贪心类题,至少构造一个反例检验策略是否可靠。
- 如果进入 DP,要先说清楚状态定义和转移含义。
赛后复盘建议
每道题复盘时建议固定回答以下问题:
- 这道题属于哪一类题型,为什么。
- 数据对象、状态变量或图模型是什么。
- 核心算法步骤是什么。
- 最容易写错的两处在哪里。
- 如果重做一次,程序结构会如何优化。