Fork me on GitHub

论如何学好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. 每道题至少写暴力
  2. 利用特殊性质特判
  3. 打表找规律
  4. 心态:追求总分最大化,不是单题满分

五、代码错误应对(不搞检查清单)

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 秒:考点、错误原因、关键一步
当天睡前 回忆今天做过的题,能想起的说明记住了
第二天开始训练前 打开做题记录,看题目回忆解法
周末 观察这一周通过的题,只看题目回忆思路
遇到类似新题 主动联想:这题和我做过的哪道像?

洛谷的做题记录和提交记录,就是外置大脑。不需要自己维护任何东西。

记忆技巧

  • 做完题口头说一句话总结,假装讲给别人听
  • 利用遗忘点复习:当天 → 第二天 → 周末,三次回忆基本刻进脑子
  • 只记住卡住你的、思路巧妙的、反复出现的题,其他忘了就忘了

九、最后提醒

  • 别和别人比,只和昨天的自己比
  • 接受波动,目标是让最差的那次也不太低
  • 坚持复盘,这是提稳定性最有效的方法
  • 保持睡眠,不熬夜刷题
  • 相信自己
posted @ 2026-08-31 20:41  tony0530  阅读(40)  评论(0)    收藏  举报