ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

高中零基础信息学奥赛:时间账、知识路线与省一目标拆解

高中零基础信息学奥赛:时间账、知识路线与省一目标拆解

九月底,机房里的空调还开着,几个刚结束军训的高一新生围过来问得最多的一句话就是:现在才开始接触信息学奥赛,是不是已经来不及了。这个问题每年都会出现,问的人里有零基础的,也有初中碰过一点代码但没系统训练过的。我的回答通常不是"来得及"或"来不及",而是先反问三个问题:你每周能稳定拿出多少小时、你现在的数学和逻辑底子在哪一档、你想要的到底是什么结果。这三个答案不同,结论可能完全相反。信息学奥赛这条赛道的特点是前期投入大、反馈周期长、上限差距极大,高中起步确实比初中起步少了两三年积累,但也远没有到"一律劝退"的程度。这篇文章就把时间账、目标账、知识账、训练账一笔一笔算清楚,给正在犹豫的高中生和家长一个能直接对照自身情况的判断框架,里面包含可执行的阶段计划、代码模板、训练节奏和一批只有实际踩过才知道的坑。

1. 先把时间账算清楚:高中三年到底剩多少有效竞赛时间

1.1 竞赛赛季节奏与不可错过的关键节点

信息学奥赛的年度节奏非常固定,固定到你可以把它当成日历用。每年九月中下旬是第一轮认证,形式以笔试为主,考察计算机基础、进制转换、简单逻辑和少量阅读程序题;十月中下旬是第二轮认证,纯上机编程,四道题、三个半小时到四个小时不等;十一月的省级联赛是大多数高中选手真正意义上的第一个大考,难度比入门级高一截;次年四月左右是省队选拔,只有省级联赛成绩靠前的人才有资格参加;七月是全国决赛,再往上才是冬令营和国家队选拔。

对高一新生来说,九月底入学、十月就碰上第二轮认证,这一次基本是"裸考体验卡",不用抱太大期望,它的价值在于让你完整走一遍报名、进场、读题、交卷的流程,知道文件读写怎么写、知道编译器版本是什么、知道三个半小时做四道题是什么体感。真正有意义的第一战是高一十一月的省级联赛,而这一战距离你入学只有两个月。也就是说,高一上学期的省级联赛,对零基础选手来说目标应该定在"拿到参赛经验、争取一个不至于难看的分数",而不是"拿一等奖"。真正可以发力的是高一下学期到高二全年,再到高三上学期还有最后一次省级联赛机会。

这里有个容易被忽略的细节:不同省份对高三学生参赛的规定不完全一样,有的省份允许高三学生参加省级联赛,有的在报名环节就有限制,具体要看当年本省的通知。这个信息必须提前一年确认,不能等到高三九月才发现报不上名。我见过有同学把全部希望押在高三最后一次,结果报名通道关闭,前面两年又没有拿到有效奖项,整个规划直接塌掉。

1.2 从高一九月倒推:有效训练窗口只有十八个月

把时间轴摊开算:高一九月到高二十一月,是第一个完整周期,约十四个月;高二十一月到高三九月,是第二个周期,约十个月;如果高三还能参赛,高三九月到十一月还有两个月。但要注意,"日历时间"不等于"有效训练时间"。

一个正常在校高中生,平日每天能挤出一点五小时已经算不错,周末拿出半天到一天,寒暑假各有一到两次集中训练。按这个强度折算,高一全年大约能积累五百到六百小时,高二如果加大投入能到七百到八百小时,加起来一千二到一千四百小时。这个量级放在初中起步的选手面前不算多,因为人家从初一开始每年三四百小时,到高一已经攒了一千五百小时以上。但一千二百小时的有效训练,如果方法对路、没有大量无效刷题,冲到省级联赛一等奖边缘是有可能的,前提是天赋和数学底子不能太差。

反过来算,如果你的目标是进省队,那通常需要在这个基础上再加至少八百到一千小时的高强度训练,而且需要高质量的模拟赛和教练反馈。高一零基础起步想在两年内进省队,现实中属于极少数个案,不能作为规划依据。把目标定在"省级联赛一等奖"或"省级二等奖",是高一起步更理性的锚点。

1.3 不同起点的可行性分档

同样是"高中起步",起点差别很大。下面这张表可以把人快速分档,你可以对号入座,不要自我美化,也不要过度悲观。

起点情况现实目标上限需要投入判断
高一零基础,数学中等省级二等奖,冲三等奖每周十小时以上,坚持一年半可行,但要接受上限
高一零基础,数学拔尖、自学能力强省级一等奖边缘每周十五小时以上,含假期集训有难度,需要方法正确
高一已会基础语法,做过几十道入门题省级一等奖较稳每周十二到十五小时比较现实
高一已有入门级认证一等奖水平省队选拔有竞争力每周二十小时以上需要教练和平台
高二零基础省级三等奖到二等奖每周十小时时间偏紧,不建议停课
高三零基础不建议作为升学路径不适用当兴趣可以,当规划不行

这张表最关键的信息不是"行不行",而是"目标要跟着起点调"。很多人失败不是因为不努力,而是一开始把目标定得过高,学了半年发现离省一还很远,心态崩了直接放弃,连本来能拿的省二都丢了。

2. 值不值得上车:目标拆解与投入产出

2.1 五档目标对应的真实门槛

信息学奥赛的奖项体系是分层的,不同层对应的能力门槛差距非常大,必须分开看。

第一档是入门级认证,主要面向初中和初学者,题目以模拟、枚举、简单排序、简单递归为主,目标是检验基础语法和代码实现能力。高中起步的人如果连这一档都拿不到高分,说明语法和调试能力还没过关,不要急着往提高级冲。

第二档是提高级认证,难度明显上升,会考到二分、前缀和、简单动态规划、图的基本遍历。这一档拿到高分,基本意味着你具备了参加省级联赛并拿奖的实力。

第三档是省级联赛一等奖,这是绝大多数高中选手的现实目标。它要求你能在四个小时内稳定做出两道到三道中等难度题,并且不犯低级错误。这一档的分数线在不同省份差异极大,强省可能要求两百多分,弱省一百多分就够,所以"在哪个省考试"本身就是一个变量,不能拿别人的分数直接对比。

第四档是省队,需要在省级联赛中排到全省前列,再通过省选。这一档对算法广度和思维深度都有要求,通常需要掌握线段树、树状数组、最短路、最小生成树、背包与区间动态规划、基础数论。

第五档是全国决赛及以上,属于极少数人的领域,涉及网络流、平衡树、点分治、复杂动态规划优化等内容。高一零基础起步基本不用把这一档纳入规划。

2.2 升学路径的含金量要分开看

很多人冲着"保送"两个字来,这里必须把话说清楚。能获得保送资格的,通常只有全国决赛中排名非常靠前的选手以及国家队成员,人数极少。省级联赛一等奖并不等于保送,它的作用主要体现在部分高校的强基计划、综合评价招生的材料加分和校测优势上,具体政策每年都在调整,不同学校要求也不同。

所以理性的期待是:信息学奥赛经历可以成为你升学材料里一块有分量的内容,能证明你的逻辑能力、自学能力和长期投入能力,部分高校的相关专业在校测中也会认可这类背景。但它不是一张万能通行证,更不能替代课内成绩。如果为了竞赛把文化课丢到年级末尾,最后竞赛又没拿到足够高的奖,那就是两头落空。

我一般建议高一学生和家长把目标分成两层:保底目标是拿到省级联赛奖项,让这段经历能写进材料;进取目标是冲更高的奖项。保底目标达成,这段投入就不算亏;进取目标达不成,也不至于影响大局。

2.3 隐性成本和风险清单

显性成本好算:教材、在线评测平台的会员、假期集训的费用、偶尔的比赛差旅。真正的大头是隐性成本。

第一是课内时间的挤压。竞赛训练会占用晚自习和周末,如果学校不支持,你还得自己找机房。长期下来,数学和物理的成绩可能会先受影响,因为这两科对逻辑要求高,你容易产生"我都学竞赛了这些还难吗"的错觉,结果反而不做题。

第二是心理成本。竞赛的反馈非常残酷,一场模拟赛零分是常事,看着别人两百多分自己四十分,很容易怀疑人生。这种挫败感在高中阶段会被放大,因为周围同学都在按部就班地提分,只有你在一个不确定的赛道里挣扎。

第三是政策风险。竞赛相关的招生政策、比赛规则、评测环境都可能变化,你不能把所有筹码压在一个不确定的路径上。

第四是健康成本。长时间坐着调试代码,颈椎、视力、作息都会受影响,这个不是危言耸听,我自己就见过因为熬夜打模拟赛导致白天上课完全听不进去的情况。

注意:如果家庭内部对"要不要走竞赛"意见不统一,先解决共识问题再开始训练。带着摇摆的心态投入,几乎必然半途而废,而半途而废的时间成本比一开始就不学更高。

3. 知识体系怎么搭:从语法到省一的路线图

3.1 四个阶段的知识清单

信息学奥赛的知识体系是有明确依赖关系的,不能跳着学。我把高中起步的路线分成四段,每段大约两到四个月,具体快慢看个人。

第一阶段是语言与工具。核心是 C++ 基础语法:变量、类型、运算符、分支、循环、数组、字符串、函数、结构体、引用,以及标准库里的 sort、vector、string、queue、stack、priority_queue、map、set。这一阶段不需要学指针和面向对象,竞赛里用得极少。重点是养成"写完必编译、编译必测试"的习惯。

第二阶段是基础算法。包括枚举、模拟、排序、二分查找与二分答案、前缀和与差分、双指针、贪心、递推、递归、深度优先搜索、广度优先搜索、简单动态规划(01 背包、完全背包、最长上升子序列、最长公共子序列)、并查集、堆。这一段是整个竞赛的地基,地基不牢,后面学什么都像在背模板。

第三阶段是数据结构与图论。包括树的遍历、二叉堆、树状数组、线段树(区间加区间求和、区间最值)、稀疏表、单调队列与单调栈、图的存储、拓扑排序、最短路(Dijkstra、Floyd、Bellman-Ford)、最小生成树、强连通分量、最近公共祖先、树的直径。这一段内容多,必须配合大量实现练习。

第四阶段是进阶专题。包括区间动态规划、树形动态规划、状压动态规划、数位动态规划、背包的多种变形、快速幂与矩阵快速幂、筛法与积性函数入门、组合数计算、逆元、字符串哈希、KMP、字典树、网络流入门、二分图匹配。这一段按目标取舍,冲省队要学,只冲省一可以把网络流和复杂字符串放到最后。

3.2 每个阶段的验收标准要可量化

"学完了"这三个字最没有意义。你需要可验证的标准。

第一阶段验收:能在三十分钟内独立写出一道涉及排序加模拟的入门题,代码一次编译通过,自己造三组数据全部正确。

第二阶段验收:能在一小时内完成一道二分答案题和一道 01 背包题,并且能口头解释为什么二分边界那样写、为什么背包要倒序枚举容量。

第三阶段验收:能默写线段树的建树、下传标记、区间修改、区间查询四个函数,能默写堆优化 Dijkstra,能解释为什么 Dijkstra 不能处理负权边。

第四阶段验收:能在模拟赛中稳定做出两道题,第三题能拿到部分分,总分稳定在两百以上。

这些标准看起来朴素,但真正能做到的人不多。大部分人的问题是"看懂了"就以为"会了",一上手写就卡在边界条件上。

3.3 平台和资料的选择逻辑

在线评测平台不需要多,两个足够:一个题目体系完整、有难度分级的国内平台用来按知识点刷题,一个国际平台用来打线上比赛、接触不同风格的题目。不要同时开五个平台,每个都刷一点,最后每个都不熟。

资料方面,一本系统的竞赛教材加一份靠谱的课件就够。视频可以作为入门辅助,但看完必须立刻动手写,光看不写等于没学。我个人的判断标准很简单:如果一个知识点你只看视频不做题,三天后基本忘光;如果做了五道相关题,能记住一个月;如果做了十道并且写过题解,能记住半年。

选择资料的另一个原则是"难度匹配"。初学者直接啃高阶教材,会被大量看不懂的数学符号劝退。正确的做法是每学一个专题,先找三道入门题、五道中等题、两道较难题,按顺序做,做不动就回头补前置知识。

4. 训练方法:刷题数量不是核心指标

4.1 每周训练节奏的具体模板

我见过太多人把"刷题"理解成"在评测平台上点开题目、看题、不会、看题解、复制、提交通过、下一题"。这个循环做一千遍也不会有质变。真正有效的训练节奏应该是下面这样。

平日每天安排一点五小时,拆成三段:前三十分钟复习昨天的错题,中间五十分钟做新题,最后十分钟整理今天的收获,写三到五行笔记。周末拿出三到四小时做一次完整的模拟赛,严格计时,中途不查资料、不看题解、不切出比赛页面。

每周至少留出一次"复盘时间",把本周做错的题重新看一遍,分类归因:是题意理解错、是算法想不出来、是实现了但写挂了、还是边界没考虑。这四类问题的解决方式完全不同,混在一起复盘没有意义。

时间段内容目的
周一至周五每天一点五小时复习错题加新题训练保持手感,逐个击破知识点
周六三到四小时完整模拟赛训练时间分配和心态
周日两小时模拟赛补题与复盘把没做出来的题真正吃透
每月一次阶段自测检验是否达到阶段验收标准

4.2 模拟赛的正确用法

模拟赛最大的价值不是分数,而是暴露问题。很多人打完模拟赛只看一眼排名就关掉,这是巨大的浪费。

正确的流程是:比赛结束后先不看题解,自己把没做出来的题再想三十分钟,实在想不出来再看;看题解时先只看思路提示,不看代码,然后自己实现;实现完对照题解代码,比较自己的写法和别人的写法在复杂度、常数、可读性上的差异;最后把这道题的关键点写成三到五句话。

模拟赛还要刻意训练策略。四道题、三个半小时,合理的分配是:前二十分钟通读全部题目,判断难度;接下来一小时主攻最有把握的一到两道;剩余时间处理第三道,能拿部分分就拿部分分;最后十五分钟检查文件读写、数组大小、多组数据清空。不要一上来就死磕第一题,也不要在最后十分钟才发现文件没开。

4.3 错题本要写成"可复现"的形式

错题本不是抄题目和代码。有效的错题记录包含四部分:题目在考什么、我当时卡在哪一步、正确的思考路径是什么、下次遇到同类题怎么识别。

举个例子,一道题你写了树状数组但答案错误,原因可能是你没有处理下标从零开始的情况,也可能是你求前缀和时边界写错。如果你只记"这题用树状数组",下次还是会错;如果你记"树状数组下标必须从一开始,输入有零要整体加一",这个经验才能真正迁移。

错题本建议用最简单的文本文件,一道题五行以内,每周翻一次。不要搞花哨的笔记软件,那会消耗你本就不多的时间。

4.4 代码习惯决定你能不能稳定发挥

竞赛现场最常见的失分不是不会做,而是会做但写挂。下面这些习惯必须在平时就养成。

第一,所有数组开大一点,通常开题目上限的一点二倍,防止边界越界。第二,涉及累加、乘法、坐标计算的变量一律用 long long,不要心疼内存。第三,多组数据一定要清空数组和标记,最好写一个 clear 函数。第四,文件读写按比赛要求写,不要等到赛场才想起来。第五,写完先测样例,再自己造小数据对拍,最后造极限数据测时间和空间。

#include <bits/stdc++.h> using namespace std; inline int read() { int x = 0, f = 1; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') { x = x * 10 + (c - '0'); c = getchar(); } return x * f; } int main() { // 比赛时按题目要求启用文件读写 // freopen("problem.in", "r", stdin); // freopen("problem.out", "w", stdout); int n = read(); long long sum = 0; for (int i = 1; i <= n; i++) { sum += read(); } printf("%lld\n", sum); return 0; }

这段快速读入在数据量大的题目里能明显减少输入耗时。注意它只处理整数,读字符串还得用 scanf 或 cin。

5. 实操记录:一份高一零基础的十二个月计划

5.1 第一个月:环境、语法与第一个一百题

第一个月的目标非常具体:装好编译器,学会用命令行编译运行,掌握基础语法,完成一百道入门题。这一百题不要挑难题,就是输入输出、分支、循环、数组、字符串、排序,目的是把手指练熟。

环境建议用主流的轻量编辑器配编译器,不要一上来折腾复杂配置。编译命令记住一条就行:g++ -o test test.cpp -std=c++17 -O2。每次改完代码重新编译,看到报错逐条读,这是最好的语法学习方式。

这个阶段最容易犯的错是"看视频看得很爽,一写就废"。解决方案是每看一个知识点,立刻关掉视频,自己写一个最小可运行例子。比如学了结构体排序,就写一个学生成绩排序;学了前缀和,就写一个区间求和。一个小时看视频,必须配两个小时写代码。

5.2 第二到第四个月:基础算法与第一次正式比赛

第二个月开始进入枚举、模拟、排序、二分、前缀和、差分、双指针、贪心。这些内容不难,但题目变化多,需要至少一百五十道题打底。第三个月进入递归、深度优先搜索、广度优先搜索、简单动态规划,这一段是第一个真正的分水岭,很多人在这里掉队。

掉队的原因通常是递归理解不深。建议手动画递归树,把每一层在做什么写清楚,再写代码。动态规划则要先学会写暴力搜索,再想怎么记忆化,最后改成递推,不要一上来就背状态转移方程。

第四个月开始接触并查集、堆、树的遍历,同时开始每周一次模拟赛。这个月的模拟赛分数大概率很难看,四道题可能只能做出半道,这是正常的,不要因此否定自己。重点是养成"先拿部分分"的意识:一道题想不出正解,先写暴力,暴力能过三成就写暴力。

// 01 背包的一维写法,注意容量必须倒序枚举 int n, m; vector<int> w(n + 1), v(n + 1); vector<int> f(m + 1, 0); for (int i = 1; i <= n; i++) { for (int j = m; j >= w[i]; j--) { f[j] = max(f[j], f[j - w[i]] + v[i]); } }

倒序枚举的原因很简单:一维数组压缩掉了物品维度,如果正序枚举,当前物品会被重复使用,那就变成了完全背包。这个细节几乎每个人第一次学都会错一次。

5.3 第五到第八个月:数据结构与图论攻坚

这四个月是投入产出比最高的阶段,也是最枯燥的阶段。树状数组、线段树、最短路、最小生成树、拓扑排序、最近公共祖先,每一个都需要大量实现练习。

我的建议是每个数据结构都手写三遍:第一遍照着资料写,第二遍关掉资料默写,第三遍在模拟赛里用一次。三遍之后才算真正掌握。线段树尤其如此,很多人看懂了懒标记的原理,但一到区间修改就下传错位置。

// 线段树:区间加、区间求和 const int MAXN = 100005; long long tree[MAXN << 2], lazy[MAXN << 2]; int a[MAXN]; void build(int p, int l, int r) { if (l == r) { tree[p] = a[l]; return; } int mid = (l + r) >> 1; build(p << 1, l, mid); build(p << 1 | 1, mid + 1, r); tree[p] = tree[p << 1] + tree[p << 1 | 1]; } void pushdown(int p, int l, int r) { if (lazy[p] == 0) return; int mid = (l + r) >> 1; tree[p << 1] += lazy[p] * (mid - l + 1); lazy[p << 1] += lazy[p]; tree[p << 1 | 1] += lazy[p] * (r - mid); lazy[p << 1 | 1] += lazy[p]; lazy[p] = 0; } void update(int p, int l, int r, int ql, int qr, long long val) { if (ql <= l && r <= qr) { tree[p] += val * (r - l + 1); lazy[p] += val; return; } pushdown(p, l, r); int mid = (l + r) >> 1; if (ql <= mid) update(p << 1, l, mid, ql, qr, val); if (qr > mid) update(p << 1 | 1, mid + 1, r, ql, qr, val); tree[p] = tree[p << 1] + tree[p << 1 | 1]; } long long query(int p, int l, int r, int ql, int qr) { if (ql <= l && r <= qr) return tree[p]; pushdown(p, l, r); int mid = (l + r) >> 1; long long res = 0; if (ql <= mid) res += query(p << 1, l, mid, ql, qr); if (qr > mid) res += query(p << 1 | 1, mid + 1, r, ql, qr); return res; }

这段代码的关键在于 pushdown 里对左右子节点长度的计算:左区间长度是 mid - l + 1,右区间长度是 r - mid,写反了就会在特定数据下出错,而且很难通过小样例发现。

图论部分,堆优化 Dijkstra 必须能默写。注意优先队列里存的是 pair,先按距离排序,取出时如果距离大于当前最短路就跳过,这一步是保证复杂度的关键。

typedef pair<int, int> pii; vector<vector<pair<int, int>>> g; vector<int> dist; void dijkstra(int s, int n) { dist.assign(n + 1, INT_MAX); priority_queue<pii, vector<pii>, greater<pii>> pq; dist[s] = 0; pq.push({0, s}); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d > dist[u]) continue; for (auto [v, w] : g[u]) { if (dist[v] > d + w) { dist[v] = d + w; pq.push({dist[v], v}); } } } }

5.4 第九到第十二个月:综合模拟与查漏补缺

最后三个月不再大量学新知识,重心转向综合训练。每周两场完整模拟赛,其余时间补短板。这个阶段的分数会有波动,因为模拟赛难度不一,不要因为一场低分就推翻整个计划。

这个阶段要开始研究"部分分策略"。很多题的正解很难,但前三十分、五十分的数据范围很小,暴力就能过。省一和省二的差距,往往就在于能不能稳定拿到这些部分分。具体做法是每道题先看数据范围:如果 n 小于等于二十,优先想状压或搜索;如果 n 小于等于一千,想平方复杂度;如果 n 到十万,就必须是线性或带 log 的做法。按数据范围倒推算法,是考场上最实用的技巧之一。

十二个月结束时,一个正常投入的高一学生应该能稳定做出模拟赛的两道题,偶尔碰出第三道,具备参加省级联赛并冲击奖项的实力。这个进度不算快,但足够扎实。

6. 常见问题与避坑实录

6.1 高频问题速查表

下面这些问题几乎每个新手都会问,我把答案整理成表,方便快速对照。

问题结论补充说明
高中零基础还来得及吗来得及,但目标要现实以省级奖项为目标,不要一上来盯省队
数学不好能学吗能学,但会卡在后期前期靠逻辑,后期靠数学,数论和组合是分水岭
英语差有影响吗影响不大题面是中文,偶尔需要看英文资料,查词典即可
要不要停课一般不建议只有进入省队冲刺阶段才值得考虑,且要和学校沟通
自学还是报班看自控力自学需要极强的执行力,报班能提供节奏和反馈
每天要练多久平日一点五小时,周末半天关键是持续,不要三天打鱼
刷题量多少合适一年四百到六百道质量比数量重要,做过要能复现
要不要学 Python不建议作为竞赛主语言正式比赛以 C++ 为主,Python 在时限上吃亏
初赛怎么准备刷五套真题即可重点看进制、逻辑、阅读程序
模拟赛一直低分怎么办先补基础,不要盲目加量低分通常是实现能力不足,不是题做少了
家长反对怎么办先谈好底线条件比如课内成绩不下滑,再谈投入时间

6.2 十个真实踩过的坑

第一个坑是只看视频不动手。视频看的时候觉得都懂,关掉就写不出来,这是最普遍的假努力。

第二个坑是只刷简单题。一直做能秒杀的题,舒适但无成长。正确比例是简单题三成、中等题五成、难题两成。

第三个坑是一道题卡三天。独立思考有价值,但超过两小时没有进展就应该看提示,否则时间成本太高。

第四个坑是看懂题解就过。看懂了不等于会写,必须关掉题解自己实现一遍。

第五个坑是跳过暴力直接想正解。暴力是理解题意的过程,也是拿部分分的保障,不要瞧不起它。

第六个坑是不测极限数据。小样例过了就提交,结果数组越界、超时、爆 int 全在正式评测里暴露。

第七个坑是忘记开 long long。累加、乘积、坐标计算,一律用 64 位整数。

第八个坑是多组数据不清空。全局数组和标记变量在每组数据前必须重置,否则第二组就错。

第九个坑是文件读写写错。文件名拼错、只开了一个、路径不对,这些在赛场上都是零分。

第十个坑是比赛策略失误。死磕一道题到结束,另外三道题看都没看,这种情况每年都有。

提示:把上面十条打印出来贴在桌前,每次模拟赛前看一遍,能避免大部分非技术性失分。

6.3 课内与竞赛的平衡怎么把握

这是家长最关心的问题,也是最多人翻车的地方。我的观察是,竞赛成绩好的学生,课内通常也不差,因为两者需要的专注力和自学能力是相通的。但反过来不成立:课内成绩一般的学生,不能指望靠竞赛逆袭,更常见的结果是两边都顾不上。

具体建议有三条。第一,设定课内底线,比如年级排名不能跌出某个区间,一旦跌破就缩减竞赛时间。第二,优先保证数学和物理,这两科和竞赛的思维训练有协同效应。第三,把竞赛训练固定在不影响听课的时间段,不要熬夜,熬夜的代价第二天会翻倍还回来。

还有一点值得说:如果学校有竞赛教练和机房资源,一定要用起来。有教练的最大价值不是讲课,而是能给你挑选合适的题目、在模拟赛后指出你的具体问题、在你想放弃的时候给你一个客观的判断。纯自学的人最容易在方向选择上走弯路,比如过早钻进冷门专题,或者长期停留在舒适区。

最后分享一个我自己觉得最有用的小习惯:每学完一个专题,用自己的话写一段三百字以内的总结,说明这个知识点解决什么问题、什么时候用、最容易错在哪。写不出来,说明还没学透。这个习惯坚持一年,你会发现自己对知识的掌握程度和那些只刷题的人完全不在一个层次上。信息学奥赛这条路,高中起步确实紧,但只要你把目标定准、把时间用对、把每一个坑都当成一次校准,一年多的时间足够让你从一个连编译都不会的新手,变成能在赛场上稳定拿分的人。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进