(十七) 解题复盘与模型迁移
做完一道题后,可以留下题目的对象和目标、关键等价关系、步骤正确的理由,以及曾让程序失败的那份小输入。代码很长时,这几项能帮助我们重新得到实现。
| 题目中保留下来的关系 | 可以再次识别的任务 | 要重新落实的题意 |
|---|---|---|
| 固定一个对象,查询所需搭档 | 和、差或多个候选目标的配对计数 | 下标是否有序、同值是否分开计数、能否重复使用当前位置 |
| 历史只影响某份统计量 | 频次、最值、累计量的逐项维护 | 未来是否还需要具体位置或方案 |
| 状态只在到达与完成时改变 | 窗口、机器或资源的事件模拟 | 队列顺序、同刻动作顺序、资源选择规则 |
| 操作保持一个量不变 | 翻转、交换与可达性判断 | 是否还需要构造证明,能否写出完整操作序列 |
| 候选值可用同一方案继续满足 | 最小可行值、最大可行值 | 判断函数是否真的代表原题全部合法方案 |
数对题改成差值时,要重新写出谁减谁;改成统计不同取值组合时,要重新解释重复值的贡献。窗口题改成“选择最早空闲窗口”时,选择依据也变了。相似故事可以提示一个模型,但每项计算仍要来自当前题面。
阶段练习: 洛谷 P1102 — A-B 数对、CF 702B — Powers of Two、洛谷 P2058 — 海港、洛谷 P1065 — 作业调度方案(进阶)。
建模得到的是变量、合法方案和计算步骤,程序还要把输入完整读入、把计算结果保存下来,并按题目要求输出。下一部分先解决批量输入,再把几百位整数的运算拆成逐位动作,最后核对可提交的程序。