最理想的比赛策略当然是赛前什么都会。不过能做到的人屈指可数,比如 Benq 或 tmw(开个玩笑)。
计时开始后已经没有时间继续学习;合理分配时间,是最大化得分的最好办法。
总体策略
策略没有固定答案,所有建议都应结合实际情况判断。最合适的策略应当针对 _你自己_量身制定。
比赛开始时
首先应该阅读_所有_题目,不要过早放弃任何一题。通常,在开始写代码之前应当 进行充分思考。根据比赛难度,你可能需要先用纸笔思考 5 分钟到 2 小时,之后 才开始敲键盘。
题目未必按难度排序,因此不要在第一题上卡三个小时却毫无进展。应先认真思考 每一道题,再决定重点攻克哪些、暂时搁置哪些。
时间分配
在一道题上投入数小时后才发现另一题其实很容易,是非常糟糕的体验。合理分配 时间可以避免这种情况。你需要自行判断哪些题有希望解决,以及何时应该止损。 一般不要在单题上花费“过长”时间,也应谨慎对待明显考查自己不熟悉知识的题目。
想到解法时
如果读题时立刻想到了完整解法,可以尽快写完代码,先拿下这道题。
另一种选择是先思考其他题,再回来实现已经会做的题。回来时可以重新确认解法 是否仍然严密,同时让其他题的思路在写代码期间继续酝酿。
存在部分分时
如果题目可以通过部分解法获得分数(USACO 就是如此),应始终留意各个子任务。 争取部分分主要有两种方式:
- 把大部分时间用于思考完整解法;若临近结束仍未解决,再实现部分分。
- 想到完整解法后务必确认正确性,避免花一小时实现一个完全错误的方案。
- 仔细估计子任务难度:实现可能只需 30 秒,也可能需要 30 分钟;看似简单的 子任务未必真的简单。
- 从部分分逐步向上:先实现最简单的子任务,再挑战更难的。子任务可能帮助你 发现完整解法,也能让解题过程保持清晰。
个人经验
Nathan Chen
在铂金组,我会先读完所有题,然后通常用第一个小时思考最容易的两题(最难题 往往真的非常难)。之后继续思考,一旦认为解法成立就开始实现。我习惯把部分分 留到最后:只有时间快用完却仍没有完整解法时才去写。
Benjamin Qi
先拿到力所能及的部分分;希望写完这些时,你已经想出了完整解法。:D