夜雨聆风学习资料网

ARTICLE · 1047491

CSP-S 2026第一轮试题分析:从石子合并到格雷码,这套题难在哪?

CSP-S 2026第一轮试题分析:从石子合并到格雷码,这套题难在哪?
9月19日CSP-S 2026第一轮结束后,相信很多家庭都找过试题估过分数。但比估分更值得追问的是:同样学过树状数组、动态规划和图论,为什么有的孩子能做出来,有的孩子仍然下不了手?

本文依据公开网络题面和媒体参考答案分析,并非CCF官方试题与标准答案,最终以CCF/NOI发布为准。

70分都在考“读懂并接着推”

试卷仍由三部分组成:15道单项选择题30分,3段阅读程序40分,2段完善程序30分。

后两部分合计70分。这意味着S组并不满足于“听说过这个算法”。孩子还要认出程序在维护什么状态,知道一行代码改变了什么,并把它一直推到输出或空格处。

如果没有看过原卷,可以先把整张卷理解成三层:单选题检查算法与数据结构基础;阅读程序要求判断一段现成代码究竟在做什么;完善程序则给出接近完整的算法,让考生补上五个关键表达式。下面选几道有代表性的题,把题目和它真正检查的能力放在一起看。

单选题熟悉,却很难只靠背结论

第1题用一小段位运算先试基本功。

题目给出一个循环:令x=2026,只要x不为0,就执行x &= x - 1并让计数器加1,问循环结束后计数器是多少。

这句位运算每执行一次,就消去二进制中最低位的一个1。因此循环次数不是二进制位数,而是2026中1的个数,媒体参考答案为8。只记得lowbit这个词,却说不清这句代码为什么能消去一个1,仍然容易失分。

第6题最适合区分“凭直觉合并”和区间动态规划。

题目给出五堆重量为4,1,3,2,5的石子,每次只能合并相邻两堆,合并代价等于两堆重量之和,要求把所有石子合成一堆的最小总代价。

如果每次看见当前代价最小的相邻两堆就合并,很容易算出35;区间DP会比较每个区间最后一次从哪里断开,媒体参考答案是34。这里真正考的不是会不会写状态转移式,而是能不能意识到:眼前最便宜的一步,不一定组成最便宜的全过程。

第10题把树的直径和重心放在同一道题里。

题目列出一棵9个结点、8条边的无根树,要求同时判断它的直径有多少条边,以及哪个结点是重心。

直径看最远两点的距离,重心看删除一个结点后最大连通块的大小,两者不是同一个概念。按题目给出的边逐一画图,媒体参考答案是直径7、重心为结点1。图不画清楚,仅凭“最居中的点”去猜,很容易把两个概念混在一起。

第14题只改了一个等号,统计对象就变了。

题目给出归并排序统计逆序对的核心代码,原本在a[i] <= a[j]时先取左边元素,并问:如果把条件改成严格小于,最终计数代表什么?

改成a[i] < a[j]后,相等元素也会进入右侧分支并被计数。此时统计的不再只是a[i] > a[j],而是a[i] >= a[j]。这类题最能检查孩子是否真正理解模板中的每个条件。

三段程序阅读,不认识名字也要看懂

第一段输入一个32位的0/1字符串,在末尾补12个0,再从左到右与一组固定的13位数据反复异或,最后输出末尾12位。它实质接近模2多项式除法。即使孩子没有学过CRC,只要抓住“首位为1就异或、处理过的位置归零”,仍能完成多道判断。算法名称不是解题门票,逐行追踪才是。

第二段先预处理一个整数序列,随后回答多个区间最大公约数查询。关键不是背ST表,而是读出dp[i][j]表示“从a[i]开始连续2^j个数的最大公约数”,再理解查询为什么取两个长度相同、可能重叠的区间。因为最大公约数允许重复计算重叠部分,这个做法才成立。

第三段输入每个结点的父亲编号,由此构成一棵树,程序要求输出树中最远两点之间经过的边数。它自底向上处理结点:每个结点保留向下的最长链,同时用两条最长链更新整棵树的直径。孩子若只看见父亲数组和循环,很容易陷进变量;先用一句话说清d[x]ans各代表什么,后面的输出题才会顺下来。

最后五个空,才是整张卷子的分水岭

第一段叫“平衡路线”:一张无向图的每条边标有+-,从起点走到终点时,可以重复经过边,目标是让经过的正边数与负边数之差尽量小。程序表面上是BFS,实际上还要同时看懂正负边编码、最短距离、二分图染色和奇环。五个空彼此关联,不能把每个空当成独立语法题来猜。

第二段叫“标准答案”:最多20名学生做300道A/B选择题,已知每名学生希望得到的目标分数,要求反向构造一份标准答案,让所有人的实际得分与目标分数之差的绝对值总和尽可能大。

程序枚举2^n种状态,却没有每次重新计算。它用格雷码让相邻状态只改变一位,再用__builtin_ctzll找到变化位置,增量更新目标值。这里把位运算、枚举、绝对值表达式和状态维护连在了一起,也是整张卷子中最需要整体理解的一段。

会背“格雷码公式是mask ^ (mask >> 1)”,只能填出其中一空;能解释为什么只翻转一位、翻转后哪些量需要更新,才算真正读懂整段程序。

考后复盘,别把所有错题都叫“粗心”

这份试卷可以把错因分成四类:概念没分清、算法模型没认出、变量状态没跟住、边界条件没看准。

复盘时,不妨让孩子选三道错题,每道只回答三个问题:这题考什么;我在哪一步开始失去把握;如果条件改一点,我还能不能做。能把错误说具体,下一步训练才不会变成盲目刷题。

如果准备第二轮,接下来更值得做的是把树、图、动态规划和搜索真正写出来,同时练习用小样例验证状态含义。第一轮答案可以帮助定位问题,但上机能力不会从继续背选择题里自动长出来。

小结

CSP-S第一轮真正拉开的,不只是知识点数量,而是三层能力:能认出模型,能解释代码,能把状态变化算到底。

家长不必逐题讲算法,但可以观察孩子是否说得清“为什么”。答对一道题当然重要,知道自己凭什么答对,才是进入下一阶段更可靠的信号。

相关学习资料