把每日大赛91从头捋一遍:把结论先放这更完整,复盘怎么来的,原来一直都错在这里

结论先放这(3 条最关键的收获)
- 整体方向没问题,输在三个重复性错误:第一,对题目限制和边界条件判断不够谨慎;第二,过早放弃简单的模拟/暴力而盲目追求复杂优化;第三,赛中测试不够全面,少了几个小样例就被卡了。
- 最短期可见效的改进:赛前 5 分钟快速扫题并标注“高概率得分/可能踩坑/跳过”,把时间预算写在纸上;实现后立即做 3 个覆盖边界的小样例。
- 长期提升要点:把“思路到代码”的常见套路做成自己的模板(贪心、二分、并查集、简单 DP、图遍历等),并在训练中有意识重复这些模板下的变形题。
从头捋:比赛流程与我的决策时间线
- 0–3 分钟:全题浏览。当天我做到了全部过一遍,但标注不够细致,导致后面浪费时间在一个看起来“能做”的中等题上。
- 3–30 分钟:先做 A/B。A(实现题)我在 8 分钟内解决,B(数据结构)在 22 分钟卡住部分边界,后续回头解决。
- 30–90 分钟:攻坚 C/D。C 看似 DP,但其实可以降维为贪心的变体;我一开始走了完整 DP,花了太多时间后来部分优化也没来得及彻底测试。
- 90–120 分钟:补题与修 bug。最后阶段修了两个因溢出/越界的小 bug,若早做小样例就能提前发现。
逐题复盘(模型化的通用模板,便于迁移到下次)
-
题目 1(实现/模拟类) 特点:逻辑清晰、边界多。 我的问题:一开始以为题意可以按常规模拟走,但忽略了空序列/重复操作的边界。 改进:写实现题时先列出“特殊输入清单”——空、单元素、最大最小值、重复极端操作,提交前逐条跑一遍。
-
题目 2(数据结构/滑动窗口/哈希) 特点:点在状态维护和窗口边界。 我的问题:用的 hash 结构没有把删除操作的复杂度算清楚,结果 TLE。 改进:遇到滑动窗口类问题,先确认添加和删除操作的复杂度,必要时用双端队列或平衡树替换简单哈希。
-
题目 3(DP/贪心辨析) 特点:看上去是 DP,但存在单调性或优先级可以贪心化简。 我的问题:直接套 DP 模板,状态、转移写得复杂且难以调试,没能在赛中发现贪心解。 改进:遇到 DP 可能的题,先做两步:1)书写状态和转移简图;2)在小样例上尝试贪心思路,看是否满足交换性或贪心选择性质。
-
题目 4(图/构造/数学) 特点:思路多样,考察观察力和构造技巧。 我的问题:过度纠结特殊构造,没有先尝试简化的构造或反例排查。 改进:遇到构造题,先用最小规模的实例手工构造并逐步放大,避免一次性追求通用证明导致时间耗尽。
原来一直都错在这里(三类常见但容易忽视的根源问题) 1) 对题意或约束的快速假设。很多时候第一眼的“我觉得可以这样做”会带来思路偏差。赛中若有疑点,花 30–60 秒在纸上画示例,验证假设是否成立。 2) 时间分配不明朗。没写下每题的目标时间,导致在有解题把握的题目上拖延。把总时间拆成段落(如 25/50/30 或 20/40/60),并在赛中严格执行,能显著减少后期抢分焦虑。 3) 测试覆盖不足。提交前通常只跑了 1–2 个例子,错过了边界。现在我开始把“至少 3 个覆盖边界的小样例”作为提交前的硬性步骤。
实操性的改进清单(可立即在下一场赛中应用)
- 赛前 5 分钟:快速标注题目难度(易/中/难)和“踩坑风险”(高/低),并写下优先顺序。
- 写代码前在纸上列出 3 个要测试的样例:最小、随机、边界;代码实现完后先跑这 3 个。
- 建立“短模板库”:常用的输入解析/整数溢出处理/并查集、二分、二进制枚举等代码片段,一键粘贴并理解。
- 做题训练时加入“反向练习”:找到自己错过的贪心解或更简单解,分析为何初看未察觉,提高直觉敏感度。
- 每次赛后做 30 分钟复盘:把错因归类到“读题/算法/实现/测试”四类里,连续记录 8 次赛结果后你会发现重复模式,针对性修正会更高效。
结语(我会怎么做,也欢迎你参考) 这次每日大赛 91 的复盘让我更清楚地看到那些“看起来是小事但赛中致命”的环节:读题习惯、时间计划和测试流程。把结论先写出来不仅帮助回顾,也能把改进项具象化,方便复制到下一场比赛。若你也在做类似的复盘,不妨把你的错因贴出来,我们可以一起把那些重复错误逐个拆解,把进步变成可复制的习惯。