打完 AtCoder Beginner Contest 之后,你做的第一件事是什么?如果是关掉页面去群里聊天,等题解出来再把不会的题“看一遍”,那我建议你把这篇看完。我见过很多选手把参赛叫做“打卡”,A 到 D 都过了就觉得自己状态不错,可你问他 C 题为什么这样写、D 题卡住时具体卡在哪一步、下一次遇到同类型题目要避免什么,他多半说不上来。这种情况基本等于:比赛参加了,经验没有沉淀,rating 变动只是运气波动。
复盘赛事的技术含量,其实一点也不比做题低。我自己是那种打完比赛如果不写复盘,隔三天连当时为什么 WA 都会忘记的人,所以慢慢练出了一套固定的赛后复盘流程,从“要不要看题解”到“怎么看题解”,从“补题补到什么程度”到“卡住的错因怎么归类”,每一步都踩过不少坑。这篇文章就把这套完整的复盘思路拆开讲一讲,不限定在某一道具体题目,而是结合一整个 Beginner Contest 的难度分布、常见翻车点和时间分配策略来讲,适合所有把 ABC 作为日常训练项目的选手参考。
1. 复盘的意义:ABC 的每一场比赛是一次带时钟的认知测试
1.1 为什么 ABC 特别适合做复盘素材
AtCoder Beginner Contest 的场次密度和题目梯度非常稳定,这是它和许多随机训练题单最大的区别。比赛中你有明确的时间压力,有提交反馈,有 WA/TLE/AC 的客观结果,甚至还有自己的紧张情绪——这些“比赛副产品”和平时坐在书桌前慢慢刷题完全不同。
我们做题训练时,心态通常比较松弛:不会就看题解,看了再写。但比赛不是这样。比赛中的 30 分钟卡题、连续两次 WA、时间剩 15 分钟还没碰 D 题,这些行为背后反映的是真实的决策漏洞。如果你只在赛后看官方题解,把这些经历丢在一边,那你损失的其实不只是补题本身,而是整场比赛提供给你的“个人决策数据”。
有一次我打完一场 ABC,B 题写了 18 分钟还 WA 了一次。复盘时我才发现原因根本不是不会写,而是我习惯性地以为输入格式是某种套路,没有认真读样例。这种问题如果放到日常刷题里,几乎永远不会暴露,因为日常没有时间压力,你会反复读题。但在比赛里它真实地发生了。这就是复盘最值钱的地方。
1.2 有效复盘和无效复盘的边界在哪里
先看两组行为对比。
无效复盘的表现是:赛后跑到题解页面,把题解从头到尾读一遍,觉得“哦原来是这样,我太笨了”,然后关掉页面,或者把 AC 代码复制提交一遍,心里舒坦了。整个过程没有压力,也没有产出,甚至没有留下任何一段属于自己的思考记录。过一周再看,同一道题可能还是不会。
有效复盘的表现则完全不同。它的最低标准我认为有三条:
- 对赛内没做出来的每道题,你能说清楚“卡住的具体技术节点”是什么,而不是用“没想到”“太菜了”带过。
- 你关掉题解和别人的代码之后,自己重新独立完成了一遍提交,并且 AC 了。注意,是重新写,不是复制。
- 你从这道题里提炼出了一条可以迁移的判断准则,比如“出现这种约束条件时应该优先想二分答案”或“这题的关键是把状态设计成剩余次数而不是当前值”。
如果这三条都能做到,那么这一道题的复盘价值基本等同于自己再做了一道同类型的中等题。如果只做第一条不做第二条,那只是看懂了,不是会做了;只看不写是很多 ABC 选手最大的惯性陷阱,因为看完题解后大脑会产生“我理解了”的错觉,而这个错觉往往会在实战中准时地给出惩罚。
1.3 复盘也要讲性价比,不是每场都要逐题啃完
我知道有人会用非常严格的方式复盘:把整场 ABC 从 A 到 G 每道题都写一篇题解,标注多种做法。这种做法在你状态充沛、时间充裕时可以,但不建议作为每场 ABC 的固定要求。复盘最终是为了服务下一次比赛,如果复盘本身占据了你所有训练时间,反而挤压了专题训练和模拟训练的比例。
我的习惯是按本场目标来决定复盘深度。如果你的 rating 还在 600 以下,核心复盘区间是 A 到 D,E 题看题解理解思路就够了;如
