CSP初赛全记录:从备赛时间线到考场复盘与复赛规划
2026年CSP初赛的考场门口,我攥着准考证,心里反复默念着昨晚背下来的复杂度公式。晨光里挤满了拿着笔记临时抱佛脚的学生,有人还在给同伴讲一道哈夫曼编码题。说实话,作为一个去年复赛失利、今年打算从头再来的普通选手,这一刻我还是有点紧张的。这篇游记就想如实记录我从备赛、进考场到考完复盘的全过程,顺便把踩过的坑和觉得有用的方法整理出来。无论你是第一次了解CSP的新手,还是已经报了名想在初赛拿稳分数的同学,这篇东西应该都能对得上。
1. 赛前一个月:我是怎么从零开始准备CSP初赛的
CSP初赛和复赛很不一样。复赛是上机写程序,初赛却是笔试,考的是计算机基础、数据结构、算法理解和阅读程序的能力。很多人觉得初赛简单,背背题就能过,但真正备考过就会发现,它的考察范围其实很碎,而且有些题目专挖细节。我给自己留了大约四周时间,节奏大概是:前两周按知识点扫描,第三周开始刷整套真题,最后一周专攻错题和薄弱点。
1.1 报名流程与备赛时间线
先说报名。CSP的报名一般是在九月初开放,登录CCF官方的报名系统注册账号,选择组别。这里特别提醒一句:报名时间和截止时间一定要设好提醒。我见过不止一个朋友因为沉迷刷题错过报名。组别方面,CSP-J是入门级,CSP-S是提高级。我今年报的是提高级,因为去年已经过了入门级初赛,想往前再走一步。报名成功后,系统会生成准考证,需要自己下载打印。我习惯多打印两张备用,一张夹在笔记本里,一张放书包夹层,免得找不着。
备赛时间线我大致这样安排:
- 第1周:重刷《信息学奥赛一本通》里的基础章节,主攻计算机基础知识、进制转换、网络协议、数据结构基础。
- 第2周:集中看算法部分,排序、二分、贪心、动态规划的基本思想,以及各种算法的时间复杂度。
- 第3周:每天一套近三年的真题,严格计时,模拟考场节奏。
- 第4周:翻错题本,把常错的“阴间题”反复看,适当做新题保持手感。
实际执行下来,前两周是最痛苦的,因为知识点太多太杂。后面做了整套题才慢慢找到感觉。
1.2 笔试复习的核心资料与刷题策略
关于复习资料,网上能搜到很多,但真正值得刷的其实就那几样:历年真题、CCF公布的大纲,还有一本比较经典的教材。真题是最重要的,一定要刷最近五年的。CSP初赛题型每年会微调,但大体稳定:
- 单项选择题,考计算机基础、语言基础、数据结构、算法概念。
- 阅读程序题,给出一段代码,判断输出或分析功能。
- 完善程序题,补全代码空缺,一般考算法模板。
我做第一套真题时,选择题错了一半,阅读程序题根本看不进去。后来发现问题是自己总想“读懂每一行”,这非常浪费时间。正确策略是:先看题目问什么,再带着问题看代码。比如阅读程序题,先读注释和主函数,猜到程序在干什么,比如是求最长上升子序列,还是做并查集合并,然后再逐段验证。
刷题策略上,我不建议一上来就刷整套,而是先按专题刷。比如今天只做所有和二叉树有关的阅读程序题,明天只做位运算相关选择题。这样能快速找出自己的薄弱环节。等专题刷完,再开始整套整套地做,培养时间分配的感觉。我的错题本记录了大概三十多道错题,每道都标了错误原因:是概念混淆,是粗心,还是根本没学过。考前最后一天,我只翻错题本,不再刷新题。
1.3 模拟考试与时间分配练习
模拟考试非常重要。我大约做了五套真题模拟,每次都把手机放远,用计时器卡时间。CSP初赛的时长一般是两小时到两小时半,具体看当年通知。我给自己定的时间分配是这样:
- 选择题和判断题:40分钟左右。
- 阅读程序题:50-60分钟。
- 完善程序题:20-30分钟。
- 剩下20分钟用来检查填涂。
第一次模拟我完全没经验,在一道阅读程序题上死磕了二十分钟,导致后面的完善程序题只能乱填。后来我学乖了,遇到读不懂的程序先跳过,做完后面的题再回头来读。这个策略帮了我大忙。
2. 考场实录:从入场到收卷的完整经历
初赛当天的流程比我预想的更紧张一些。我提前四十分钟到了考点,校门口已经排起了长队。有老师拿着名单核对准考证,还有人因为没带身份证被拦在门口,急得团团转。我再次确认了装在透明文件袋里的准考证、身份证和几支黑色水笔,才松了口气。
2.1 考场环境与突发情况
进入考场后,我发现座位安排得非常紧凑,前后距离不大,基本没有抄别人答案的空间。监考老师强调了两遍考场纪律,还挨个核对证件。我前面有个同学准考证打印成了黑白版,照片不清晰,和监考老师解释了好半天才放进去。所以准考证这种东西,宁可多打印几份,也不要用手机里的照片顶替。考试开始前,监考老师发了草稿纸,每人只有一张,如果不够用可以举手再要,但换草稿纸会浪费一些时间。
我坐在靠窗的位置,阳光刚好照在桌面上,答题卡反光有点刺眼。这种小细节平时真想不到。建议大家考试时穿不带帽子的衣服,有需要的话戴个不遮挡视线的帽子,当然具体还要看监考要求。
考试铃响后,我深吸一口气,先把整张试卷从头到尾翻了一遍,大致心里有数:选择题有十五道,阅读程序题四道,完善程序题两道。题量不算特别大,但阅读程序题的代码量明显比往年长一些。
2.2 选择题与判断题的临场发挥
选择题第一题考的是进制转换,给了一个十六进制数让转成十进制。这种题属于送分题,我大概花半分钟就写出来了。后面有几道考网络协议和存储器类型的题,说实话有些概念我背得不牢,当时犹豫了挺久。遇到这种不确定的题,我的办法是先排除明显错误的选项,再用常识判断。比如有一题问TCP协议的特点,有个选项写“无连接”,这明显是UDP的特点,一排除就直接选出来了。
判断题相对友好,大多数考概念辨析。有一道关于栈和队列的判断题说“栈和队列的插入和删除操作都只能在线性表的一端进行”,这显然是错的,因为队列插入在一端,删除在另一端,栈才是在同一端。这种细节如果复习不仔细很容易看错。考场上一紧张,容易把“都可以在两端操作”和“都只能在一端操作”搞混,所以做题时要把关键词圈出来。
2.3 阅读程序与完善程序的推理过程
阅读程序题是我最担心的部分。今年的题有一道给了个递归函数,大概是在算二项式系数,但代码里用了非常奇怪的变量名。我一开始没看懂,差点卡死在那里。后来我冷静下来,在草稿纸上手动模拟了一个很小的输入,比如n=5,k=2,计算过程一下就清晰了。
还有一道阅读程序题涉及位运算,代码里反复出现“&”和“|”运算符,还有一些移位操作。平时刷题的时候,我经常把位运算的优先级和含义搞混。在考场上我特意在草稿纸上把“优先级:! > 算术运算符 > 关系运算符 > & > ^ > | > 逻辑运算符”写下来,然后才慢慢推。虽然费了点时间,但稳住了正确率。
完善程序题考了一个并查集的模板,另一个是二分查找的变体。并查集那题让我补全路径压缩的部分,我看到“find(x)”函数里return语句缺了东西,立刻想到要写“fa[x] = find(fa[x])”。这个知识点我考前刚好背过,算是运气好。二分查找那题是求最大的可行值,边界条件很容易写错,我仔细检查了两个mid的取值,纠结了一会儿,最后选了看起来更保险的写法。说实话,这类题真要全部答对很难,但能拿的分一定要拿到。
3. 错题复盘:那些让我后悔的知识点盲区
考完当天晚上,我趁记忆还新鲜,对着回忆版的题目做了一次复盘。虽然我记不全原题,但能清楚感受到哪些知识点自己没复习到位。有些错误,真的只要考前多看一眼就能避免。
3.1 计算机基础题里的易混点
我错得最可惜的一道选择题是关于IPv6地址的。我知道IPv4是32位,IPv6是128位,但题目问的是IPv6地址的表示形式,选项里有“冒号十六进制表示法”。我居然在“冒号十六进制”和“点分十进制”之间犹豫了很久,最后选错了。这就是复习时只记了位数,没记表示形式的后果。类似的易混点还有:
- 总线的类型:地址总线、数据总线、控制总线分别做什么。
- 存储器的层次结构:Cache、内存、外存的访问速度和容量关系。
- 原码、反码、补码的转换规律,尤其是负数的补码。
这些问题不难,但碎,需要反复记忆。我建议大家把这类“背多分”知识点整理成一张表,考前扫一遍非常管用。
3.2 算法概念与复杂度分析的坑
算法复杂度是初赛必考的内容,但考的角度经常很刁钻。今年有一道题问快速排序在“平均情况”下的时间复杂度。这题我本来会,可选项里写的是“O(nlogn)”和“O(n)”两个很像的答案,我看快了竟然选成了O(n)!考完后才想起来快排平均是O(nlogn),最坏才是O(n²)。这种错误完全不是不会,而是太急。
还有一道关于稳定排序的判断,给了一段代码让我判断它是不是稳定排序。我光顾着看代码里的交换逻辑,忘了稳定性定义是指相同值的元素在排序前后的相对顺序不变。这道题也错了。如果要给考生一个建议,那就是:排序算法的稳定性、时间/空间复杂度,不能只背结论,一定要理解为什么。比如为什么快排不稳定,因为分区交换时会把相同元素的位置打乱。
3.3 程序阅读题的失分原因
阅读程序题可以说是初赛的拉分大头。我复盘后发现,自己丢分的原因主要有三类:
第一,变量作用域和生命周期没看清。比如代码里有一个全局变量和一个同名局部变量,函数内部用的是局部变量,但我在模拟时用了全局变量的值,导致结果算错。
第二,递归终止条件漏看。有时递归函数里藏了一个if语句,决定是否继续递归,我看漏了,手算了几层之后得到的输出完全对不上。
第三,循环上下界和步长。有些循环不是从0到n,而是从1到n-1,步长还是2。这些细节如果不仔细,很容易模拟错。
我的建议是:读程序时,先画出变量表,每一步执行后更新变量值。尤其是递归和多重循环,画表比硬记可靠得多。虽然费草稿纸,但正确率明显提升。
4. 初赛之后的思考:复赛路线与长期备赛规划
初赛只是第一关。不管考得好坏,真正的重头戏还在后头,复赛是上机编程,难度和考察方式完全不同。我身边有不少同学初赛分数很高,但复赛连题都读不完。初赛考的是“看懂程序”,复赛考的是“写出程序”,这之间有道不小的坎。
4.1 初赛成绩的预计与心态调整
考完后我对了网上的估分,大概在过线线附近徘徊。这种不上不下的感觉最折磨人。但我也很清楚,初赛过没过,本质上取决于你所在的省份和组别。有些强省分数线高得离谱,弱省会宽松不少。与其干等着出成绩,不如立刻转换心态,开始准备复赛。初赛只是一个资格赛,就算初赛分数不错,也只是多了一点点优势,最终看的是复赛成绩。
我在等成绩那几天做了一件自己觉得很有用的事:把初赛里出现的算法和数据结构列了一个清单,比如二分、贪心、并查集、图的最短路、动态规划,然后在OJ上找对应的模板题,每天练两到三个。等成绩出来时,我已经写了差不多三十道题,手感恢复得非常快。
4.2 从初赛看复赛:编程能力的真实差距
复赛是四个小时的机试,通常有三到四道题,考察建模能力和代码实现能力。初赛笔试里那些“完善程序”题,实际上就是复赛题的缩小版。如果你在初赛里完善程序题写得很吃力,那说明你的代码量还不够,需要加大训练量。
我的复赛备赛重点放在这几个方面:
- 基础数据结构:栈、队列、链表、树、并查集,至少能手写实现。
- 常用算法:二分答案、DFS/BFS、最短路径、最小生成树、动态规划入门。
- 调试能力:用输出中间变量的方式找BUG,而不是干瞪眼读代码。
另外,复赛特别考验心态。去年的我,第一道题卡住后就慌了,后面全崩了。今年我给自己定的规矩是:开考后先花二十分钟通读所有题目,挑最简单的先做,拿到保底分再说。这个策略也是很多竞赛老手推荐的。
4.3 给未来考生的建议与碎碎念
如果让我给未来参加CSP初赛的同学说几句掏心窝的话,我想说:
第一,别裸考。CSP初赛虽然不像复赛那样直接拼代码量,但“背多分”的知识点非常多,临时抱佛脚真的有用。
第二,真题的价值最大。至少做三到五套真题,不要满足于“看懂了”,一定要动手下笔写答案,还要计时间。
第三,建立错题机制。不要只对完答案就扔,要把错题背后的知识点找出来,比如“为什么错?下次怎么避免?”这样备考效率会高很多。
第四,平衡初赛和复赛。初赛只是门槛,真正决定奖项的是复赛。所以别把太多精力押在初赛的偏题怪题上,重点还是把编程基础打扎实。
最后再分享一个小技巧:考试当天带一块巧克力或小包装零食,进场前吃一点,能帮助稳定情绪;答题时先易后难,不会的题先跳过,等到做完全卷再回来攻。如果时间实在不够,也有一个通用的蒙题法——选择题里选最长或最中间的那个答案,概率上稍微高一点,但这只是心理安慰,别当成真策略。
出考场的时候,夕阳刚好打在校门口的横幅上,有人在讨论网络上的答案,有人已经打开手机开始刷复赛的模拟题。我很清楚,初赛这场旅行已经结束,接下来还有更长的路要走。希望这篇游记能给你一点参考,也祝愿所有参加CSP的同学都能拿到自己想要的成绩。