论如何学好OI
一、核心学习三原则
1. 深度思考 > 刷题数量
- 每题独立思考 30~60 分钟,不要急着看题解
- 看题解只看思路,代码必须关掉后自己重写
- 做完问自己:关键点是什么?为什么没想到?下次怎么识别?
2. 总结归纳 > 做新题
- 不用本子,做完题立刻在脑子里过一遍:考点、易错点、类似题
- 当天睡前花 10 分钟回忆今天做过的题
- 第二天做新题前,先回忆昨天的题
- 遇到类似题主动联想:这题和我做过的哪道像?
3. 限时训练 > 不限时刷题
- 简单题限时 15~30 分钟,中等题限时 60 分钟
- 写完必须自己构造 2~3 组数据测试
- 最好能对拍(暴力 + 正解 + 随机数据)
二、成绩不稳定的诊断与解决
1. 四类失分原因
知识盲点
- 表现:题目考了没学过或不熟的知识点
- 解决:每周集中攻一个薄弱专题,刷 5~8 道题,从易到难
策略失误
- 表现:死磕一题导致后面没时间,部分分没拿全
- 解决:固定比赛流程,每题思考超时强制写暴力跳过
代码 bug
- 表现:思路对但代码错,小错误多,调试慢
- 解决:对拍、造特殊数据、通读代码、固定习惯(见第五部分)
心态问题
- 表现:紧张、看错题、被他人节奏影响
- 解决:读题圈关键词,不设分数目标,专注自己
2. 如何找出主要问题
- 打开洛谷/Codeforces 的比赛记录
- 对着每道题回忆:当时怎么想的?为什么没做出来?
- 连续两三次都是同一原因,你自己心里会很清楚,下次比赛前特别提醒自己
三、固定比赛流程(CSP-S 4 小时)
| 时间段 | 任务 | 关键动作 |
|---|---|---|
| 0~15 分钟 | 通读所有题 | 标记数据范围、部分分、难度顺序 |
| 15~40 分钟 | 完成最简单题 | 拿满分,写完测试再提交 |
| 40~110 分钟 | 主攻第二题 | 40 分钟没思路就写暴力跳过 |
| 110~155 分钟 | 第三、四题写暴力 | 每道题至少拿基础分 |
| 155~210 分钟 | 回头优化 | 优先第二题,再补部分分 |
| 最后 30 分钟 | 只检查不写新代码 | 文件名、数组、数据类型、提交确认 |
铁律:
- 每题思考超 40 分钟没进展,必须写暴力跳过
- 每道题至少写一个暴力,哪怕只有 20 分
- 最后 30 分钟不写新代码
四、部分分策略
- 每道题至少写暴力
- 利用特殊性质特判
- 打表找规律
- 心态:追求总分最大化,不是单题满分
五、代码错误应对(不搞检查清单)
1. 提交前多检查易错内容
比如说数组没有清空,静态内存开大,卡常,freopen,数组大小,特判,边界
2. 平时多对拍,比赛时间够就跑几组
- 对拍 = 暴力 + 正解 + 随机数据
- 能自动发现数组越界、逻辑错误、边界问题
- 比人眼检查可靠得多
3. 写代码固定风格
- 变量命名固定
- 使用 const 定义数组长度
- 常见语法写法固定
- 多组数据每次清零,形成习惯
4. 写完多测一组“极端数据”
- 数组题:测 n=1 和 n=最大
- 涉及负数:测全负数
- 涉及排序:测全相等
- 多组数据:测只有 1 个数据的情况,或者组数拉满的情况
5. 通读代码后仍不确定有没有错?怎么办?
这是很常见的情况:代码写完了,自己读了一遍,感觉没问题,但心里没底。这时按以下步骤做:
第一步:先跑极端数据
- 如果还没跑,马上跑一组极端数据(见上面第 4 点)
- 极端数据能暴露 80% 的隐藏错误
第二步:用对拍(如果时间允许)
- 写一个简单暴力,生成随机小数据,和你的代码对比
- 跑几十组,如果全对,基本可以放心
- 如果不对,立刻定位 bug,比人眼找快得多
第三步:如果没时间对拍,就根据“信心值”做决定
- 信心高(思路清晰、代码一次写出、测试了几个数据都过):直接提交,不要再反复看
- 信心中等(思路基本清晰,但有些地方感觉模糊):再测一组针对你模糊点的数据,如果过了就提交
- 信心低(感觉代码能跑但不确定正确性):先标记此题,去做其他题,等其他题搞定后再回来用对拍或重新读代码
第四步:暂时放下,换题后再回来看
- 很多时候代码的错误在刚写完时看不出来,但过 10~20 分钟回来,脑子清醒了,一眼就能发现
- 这是最实用的技巧之一:时间是最好的调试器
第五步:最后提交前,只关注最可能出错的地方
- 不再通读代码,而是只检查:
- 变量名有没有写反
- 数组下标有没有越界
- 输出格式对不对
- 其他地方信任自己的第一感觉
第六步:如果实在不确定,宁可提交也不空着
- 提交了可能错,但不提交一定零分
- 即使错了,也收获了经验,下次不再犯
6. 接受偶尔的低级错误
- 不检查也不影响大局,真正影响成绩的是策略和思维
- 偶尔数组越界或变量写错,是每个选手都会遇到的,不必焦虑
六、心态管理
1. 比赛前
- 不设分数目标,只想“把会做的做对”
2. 比赛中
- 读题至少两遍,圈画:数据范围、输出格式、特殊条件、是否多组数据
- 遇到难题先跳过,回头再看往往有新思路
- 不关注别人交题,被干扰就深呼吸
- 牢记“不会先暴力,回头再优化;超时先跳题,切记勿恋战;写完先自测,最后再提交。”
3. 比赛后
- 不纠结分数,只分析失分原因
- 接受波动,目标是让下限越来越高
七、日常训练安排
- 前 10 分钟:回忆昨天。打开洛谷做题记录,看题回忆解法,回忆不起来就再看一眼。
- 中间时间:不会的算法做专题,5~8 题难度递增,快速学会;T1、T2 保满分,限时训练,超时重写,加压的同时练检查;T3 冲正解,自己想 80 分钟,然后写代码、对拍,没问题后提交,保证正解或高分,接着看题解,看看别的做法或者不是正解的话就只看思路,然后自己梳理完重写,最后反省为什么做不出来,再给点时间能想出来吗。
- 睡前 10 分钟:回忆今天。躺在床上回想做过的题,想不起来的明天起床第一件事看。
每周一次完整模拟赛
- 严格 4 小时,不查资料不看题解
- 赛后打开比赛页面,逐题在脑子里回忆:
- 当时思路是什么?
- 为什么没做出来?
- 现在能想出来吗?
- 想不出来的看题解,关掉后自己重写
八、不用本子的记忆方法(替代错题本)
核心:用“回忆”代替“记录”
| 时机 | 动作 |
|---|---|
| 做完一道有价值的题 | 立刻在脑子里过 30 秒:考点、错误原因、关键一步 |
| 当天睡前 | 回忆今天做过的题,能想起的说明记住了 |
| 第二天开始训练前 | 打开做题记录,看题目回忆解法 |
| 周末 | 观察这一周通过的题,只看题目回忆思路 |
| 遇到类似新题 | 主动联想:这题和我做过的哪道像? |
洛谷的做题记录和提交记录,就是外置大脑。不需要自己维护任何东西。
记忆技巧
- 做完题口头说一句话总结,假装讲给别人听
- 利用遗忘点复习:当天 → 第二天 → 周末,三次回忆基本刻进脑子
- 只记住卡住你的、思路巧妙的、反复出现的题,其他忘了就忘了
九、最后提醒
- 别和别人比,只和昨天的自己比
- 接受波动,目标是让最差的那次也不太低
- 坚持复盘,这是提稳定性最有效的方法
- 保持睡眠,不熬夜刷题
- 相信自己

浙公网安备 33010602011771号