C++ / ACM 自学笔记 · v5.0

(十七) 解题复盘与模型迁移

做完一道题后,可以留下题目的对象和目标、关键等价关系、步骤正确的理由,以及曾让程序失败的那份小输入。代码很长时,这几项能帮助我们重新得到实现。

题目中保留下来的关系 可以再次识别的任务 要重新落实的题意
固定一个对象,查询所需搭档 和、差或多个候选目标的配对计数 下标是否有序、同值是否分开计数、能否重复使用当前位置
历史只影响某份统计量 频次、最值、累计量的逐项维护 未来是否还需要具体位置或方案
状态只在到达与完成时改变 窗口、机器或资源的事件模拟 队列顺序、同刻动作顺序、资源选择规则
操作保持一个量不变 翻转、交换与可达性判断 是否还需要构造证明,能否写出完整操作序列
候选值可用同一方案继续满足 最小可行值、最大可行值 判断函数是否真的代表原题全部合法方案

数对题改成差值时,要重新写出谁减谁;改成统计不同取值组合时,要重新解释重复值的贡献。窗口题改成“选择最早空闲窗口”时,选择依据也变了。相似故事可以提示一个模型,但每项计算仍要来自当前题面。

阶段练习: 洛谷 P1102 — A-B 数对、CF 702B — Powers of Two、洛谷 P2058 — 海港、洛谷 P1065 — 作业调度方案(进阶)。

建模得到的是变量、合法方案和计算步骤,程序还要把输入完整读入、把计算结果保存下来,并按题目要求输出。下一部分先解决批量输入,再把几百位整数的运算拆成逐位动作,最后核对可提交的程序。

查阅笔记正文与全部题解 · Ctrl / ⌘ K