本表用于同一道题在 Python 和 C++ 之间做一致性复核。重点不是“语法一样”,而是“算法思想、数据规则、输出结果完全一致”。
一、开始编码前
- 输入字段含义是否完全一致。
- 每个字段的类型判断是否一致。
- 目标函数、评分规则、排序规则是否已经写成明确文字。
- 是否已经决定用哪些数据结构表示核心对象。
- 是否已经写出至少 1 个手工样例推演。
二、编码过程中
输入与解析
- 输入解析规则是否一致。
- 空行、末尾换行、额外空格是否处理一致。
- 日期、编号、名称等复合字段的拆分方式是否一致。
数值计算
- 整数除法规则是否一致。
- 百分比、平均值、四舍五入规则是否一致。
- 是否都使用了足够大的整数类型。
- 浮点输出精度是否一致。
排序与比较
- 主关键字是否一致。
- tie-break 是否一致。
- 升序和降序方向是否一致。
- 名称或编号比较方式是否一致。
数据结构
- Python 的
dict/list/set与 C++ 的map/vector/set对应关系是否清楚。 - 是否有默认值行为差异。
- 是否有遍历顺序差异需要显式排序。
算法流程
- 状态更新顺序是否一致。
- BFS/最短路/DP 的状态定义是否一致。
- 结束条件是否一致。
- 异常分支是否都覆盖。
三、提交前逐项核对
- 样例是否同时通过。
- 自造边界样例是否同时通过。
- 输出格式是否逐字符一致。
- 多组数据时状态是否都正确重置。
- 是否保留了必要的调试记录和复盘说明。
四、常见语言差异提醒
| 检查点 | Python | C++ | 复核重点 |
|---|---|---|---|
| 整数范围 | 自动扩展 | 受类型限制 | C++ 是否需要 long long |
| 排序 | sort(key=...) | sort + comparator | tie-break 是否写全 |
| 字典/映射 | dict | map / unordered_map | 默认行为与遍历顺序 |
| 队列 | deque | queue | 出入队逻辑是否一致 |
| 最小堆 | heapq | priority_queue + greater | 比较方向是否一致 |
| 字符串转数值 | 简洁 | 显式更常见 | 异常输入是否处理一致 |
五、带训复盘建议
- 不要只对比最终结果,要对比中间状态。
- 如果双语言结果不同,先从最小样例开始定位分歧。
- 复盘记录里建议单独写一节“语言差异导致的问题”。
- 训练后要求学生总结:哪些是算法问题,哪些只是语言实现差异。