GESP C++ 五级和四级相比,明显开始从“会写程序”过渡到“会分析问题”。
五级题目不一定要求复杂的数据结构,但非常重视:
数学性质的发现; 排序与贪心建模; 质数、因数、最大公因数等数论基础; 前缀和、枚举、二分、位运算等常用算法思想; 根据数据范围选择合适复杂度。
如果说四级更偏向“基础语法 + 简单模拟”,那么五级已经开始要求学生具备一定的算法抽象能力。
一、数论基础与质因数分解
数论是五级最核心的考点之一。
从历年真题来看,五级非常喜欢考察质数、质因数分解、最大公因数、质因子个数、特殊数判断等内容。
1. 质因数分解
B3871 [GESP202309 五级] 因数分解 B4070 [GESP202412 五级] 奇妙数字 P14918 [GESP202512 五级] 相等序列
这类题的核心能力是:
把一个整数拆成若干个质因数,再利用质因数的指数信息解决问题。
教学重点:
会判断质数; 会用试除法分解 以内的整数; 会用筛法预处理 或 范围内的最小质因子; 理解“质因数种类”和“质因数指数”的区别; 注意 long long的使用。
其中:
因数分解 是最基础的质因数分解输出题,适合作为五级数论入门题。
奇妙数字 要进一步分析:
一个奇妙数字是 ,如果 中某个质因子 的指数是 ,那么最多能选择:
并且要求:
所以这题本质是:质因数分解 + 指数贪心。
相等序列 更综合。
每次操作相当于让某个数的某个质因数指数 或 。所以题目可以转化为:
对每一种质因子,统计所有数中它的指数,然后把这些指数变成相同值,最小代价取中位数。
这题已经明显比普通质因数分解更深,适合作为五级数论提高题。
2. 质数筛与质因子统计
B3969 [GESP202403 五级] B-smooth 数 P10720 [GESP202406 五级] 小杨的幸运数字 P14073 [GESP202509 五级] 数字选取
这类题通常不适合对每个数单独暴力分解,而是要利用筛法批量预处理。
教学重点:
埃氏筛求质数; 预处理每个数的最大质因子; 预处理每个数有多少种不同质因子; 根据题目要求快速回答。
B-smooth 数 的关键是:
一个数是不是 -smooth,只需要判断它的最大质因子是否不超过 。
因此可以先预处理每个数的最大质因子,再统计答案。
小杨的幸运数字 要判断一个数是否恰好有两种不同质因子。
这题适合训练学生区分:
质因数总个数; 不同质因数个数。
例如 ,虽然一共有三个质因数因子位置,但不同质因子只有 两种。
数字选取 看起来像构造题,实际上核心是数论观察:
从 中选若干个数,使得任意两个数互质。
每个质数最多只能被一个选中的数使用。
为了选得尽可能多,可以选择:
数字 ; 每个质数对应的一个质数幂。
所以答案本质上是:,其中 表示不超过 的质数个数。
这是一道非常适合训练“从互质关系抽象到质因子资源”的题。
3. 最大公因数与差分思想
P13014 [GESP202506 五级] 最大公因数
这题是五级中非常好的 GCD 性质题。
题目要求多次询问:
直接每次枚举所有数会超时。
关键性质是:
如果所有数同时加上 ,那么它们之间的差值不变。
因此:
等价于:
教学重点:
理解 ; 把多个数的 GCD 转化成“一个变化量 + 若干固定差值”; 先预处理固定部分的 GCD; 每次询问 回答。
这类题非常适合作为五级数论综合题。
4. 特殊数判断与枚举
P15798 [GESP202603 五级] 有限不循环小数
这题考察一个基础数学性质:
能化成有限小数,当且仅当 的质因子只包含 和 。
也就是说,终止数一定形如:
教学重点:
理解有限小数与分母质因子的关系; 枚举所有 ; 去重、排序; 统计区间 内的数量。
这类题代码不长,但很考察数学性质能否发现。
二、排序、排名与贪心
五级中的排序题不再只是简单调用 sort。
很多题目需要学生先建立排序规则,或者通过排序转化为贪心选择。
1. 多关键字排序与排名
B3968 [GESP202403 五级] 成绩排序
这是一道非常典型的结构体排序题。
题目要求按照多级规则排序:
总分高者靠前; 总分相同,看语文和数学总分; 仍相同,看语文和数学最高分; 仍相同,并列。
教学重点:
用结构体保存每名同学的信息; 自定义排序规则; 并列排名的处理; 最后要按照输入顺序输出排名,而不是按照排序后顺序输出。
这题适合作为五级排序专题的入门题。
2. 经典排序贪心
P11960 [GESP202503 五级] 平均分配
这题本质是一个非常经典的差值贪心。
有 件物品,每件物品卖给 B 有一个价格,卖给 C 有一个价格,要求 B 和 C 各买 件,使总收益最大。
可以先假设所有物品都卖给 C。
如果第 件物品改卖给 B,收益变化量是:
所以只需要选出 个变化量最大的物品卖给 B。
教学重点:
先固定一种基础方案; 把选择的影响转化为差值; 排序后选最大若干个; 注意使用 long long。
这题是五级中非常好的贪心入门题。
3. 截止时间调度贪心
B3872 [GESP202309 五级] 巧夺大奖
这题是经典的“带截止时间的任务选择”。
每个小游戏耗时都是 ,有一个完成期限和奖励,要求最大化总奖励。
常见做法是:
按照奖励从大到小考虑任务,每个任务尽量安排在不超过截止时间的最晚空闲时间段。
教学重点:
每个任务耗时相同; 奖励越大越应该优先考虑; 选择某个任务后,应该放在尽量靠后的合法位置; 这样可以为其他期限更早的任务留下空间。
这题可以作为五级贪心专题的核心题。
4. 枚举目标值的贪心
B4071 [GESP202412 五级] 武器强化
这题属于五级中偏难的贪心建模题。
目标是让第 种武器适配的材料数量严格大于其他武器,并且总花费最小。
直接贪心并不容易,因为:
有些材料必须从其他武器转走; 有些材料是为了增加第 种武器数量而额外购买; 目标数量不同,最优方案也不同。
比较稳妥的思路是:
枚举第 种武器最终拥有多少个材料,然后计算为了达到这个目标,最小需要花费多少。
教学重点:
枚举最终目标; 对每一类武器分别处理; 超过限制的材料必须转走; 不够的部分再从剩余材料中选便宜的补足; 用排序维护最小花费。
这类题适合放在贪心专题后半部分。
三、二分答案与可行性判断
五级中已经开始出现“答案不好直接算,但可以判断某个答案是否可行”的题目。
这类题适合引入二分答案思想。
1. 数学不等式 + 二分答案
P13013 [GESP202506 五级] 奖品兑换
题目有两种兑换方式:
用 张课堂优秀券和 张作业优秀券; 用 张课堂优秀券和 张作业优秀券。
要求最多能兑换多少份奖品。
如果直接模拟,会发现数据范围很大。
更自然的做法是:
二分答案 ,判断能否兑换 份。
设第一种兑换方式用了 次,那么第二种用了 次。
就会得到两条不等式:
只要存在合法的 ,说明 份奖品可以兑换。
教学重点:
答案具有单调性; 将“最多多少份”转化为“能否兑换 份”; 用不等式判断可行性; 注意 时要单独处理。
这题是五级二分答案中非常好的例题。
2. 序列合法性 + 二分答案
P14917 [GESP202512 五级] 数字移动
这题要求找到最小的 ,使得每次只移动花费不超过 的数字,也能让每对相同数字相邻。
如果一个数字大于 ,它就不能被移动。
因此,判断某个 是否可行时,可以把所有不超过 的数字看成“可以随便移动”,把大于 的数字看成“不能动”。
那么剩下不能动的数字,在压缩后的序列中,必须已经成对相邻。
教学重点:
把“大于 ”的元素看作固定元素; 删除所有“可以移动”的元素; 判断剩余序列是否每两个相同数字相邻; 利用可行性的单调性二分最小 。
这题比普通二分答案更难,因为它需要先抽象出“哪些元素真正限制了答案”。
四、前缀和、枚举与区间统计
五级题目中,二维网格、区间统计、批量查询开始变多。
这类题的重点不是语法,而是如何降低枚举复杂度。
1. 二维前缀和与矩形枚举
P10719 [GESP202406 五级] 黑白格
题目要求找到至少包含 个黑格子的最小子矩形面积。
暴力枚举矩形后再逐格统计黑格子数量,复杂度太高。
可以使用二维前缀和,在 时间内求任意矩形中的黑格子数量。
教学重点:
二维前缀和的定义; 如何快速求子矩形和; 枚举矩形上下左右边界; 用面积更新答案; 不存在合法矩形时输出 。
这题适合作为五级二维前缀和的代表题。
2. 集合交集统计
P15799 [GESP202603 五级] 找数
这题给出两个互不相同的数组,要求统计两个数组中都出现的数有多少个。
做法很多:
排序 + 双指针; 哈希表; set或unordered_set。
如果用于五级教学,更建议优先讲:
排序 + 双指针。
教学重点:
两个数组分别排序; 双指针从小到大扫描; 相等时答案加一; 小的一方指针后移; 总复杂度 。
这题适合作为“排序后线性统计”的基础题。
五、位运算与二进制思想
五级开始出现一些明显带有二进制性质的题目。
这类题往往代码不一定长,但需要学生理解二进制表示。
1. 按位与最大值
B3930 [GESP202312 五级] 烹饪问题
题目要求从所有两种食材中,找到最大的按位与结果。
如果直接枚举两两组合, 很大时会超时。
一个常见思路是按二进制位从高到低贪心:
尝试把当前答案的某一位设为 ,然后判断是否至少有两个数都包含当前候选答案的所有二进制位。
如果有,说明这一位可以保留。
教学重点:
按位与结果的某一位为 ,要求两个数在该位都为 ; 从高位到低位尝试构造答案; 判断有多少个数满足 ; 贪心保留可行的二进制位。
这题是非常典型的位运算贪心题。
2. 二进制计数与奇偶性
P14074 [GESP202509 五级] 有趣的数字和
题目要求统计区间 中,二进制表示里 的个数为奇数的整数之和。
数据范围较大,不能逐个数判断。
可以设计函数 :
表示 中所有有趣数字的和。
然后答案就是:
教学重点:
二进制位数分析; 按最高位拆分区间; 维护当前 的个数奇偶性; 或使用数位 DP 思想处理; 注意答案要用 long long。
这题适合放在位运算专题后半部分。
六、数学建模与特殊性质题
这一类题不一定有固定模板,关键在于发现题目背后的数学结构。
1. 平方数倍数与预处理
B3929 [GESP202312 五级] 小杨的幸运数
题目规定:
所有大于等于 的完全平方数是超级幸运数,超级幸运数的倍数是幸运数。
所以可以先枚举所有不小于 的完全平方数,再把它们的倍数全部标记为幸运数。
对于非幸运数,还要找到不小于它的最小幸运数。
教学重点:
枚举平方数; 类似筛法标记倍数; 预处理每个位置右侧最近的幸运数; 多组询问快速回答。
这题适合训练学生“先预处理,再回答询问”的思维。
2. 攻击次数与质数判断
B4050 [GESP202409 五级] 挑战怪物
物理攻击第 次造成 点伤害。
如果连续使用 次物理攻击,总伤害是:
魔法攻击至多一次,并且造成一个质数伤害。
因此问题可以转化为:
判断 是否可以表示成: 或者:,其中 是质数。
教学重点:
等比数列求和; 枚举物理攻击次数; 判断剩余血量是否为质数; 取最小攻击次数。
这题很适合作为“数学公式 + 质数判断”的综合题。
3. 正负贡献分析
B4051 [GESP202409 五级] 小杨的武器
每场战斗会让所选武器熟练度增加或减少 。
目标是让最终最大熟练度尽可能大。
如果只有一种武器,那么所有变化都必须加到它身上。
如果有多种武器,那么:
正贡献应该全部加到当前熟练度最高的武器上; 非正贡献可以分配给其他武器,避免影响最大值。
教学重点:
区分 和 ; 正数贡献一定有利于最大值; 负数贡献可以转移给“非目标武器”; 先找初始最大值,再累加所有正贡献。
这题代码不难,但思维上很考察对“最大值目标”的理解。
4. 原根判断
P11961 [GESP202503 五级] 原根判断
这题需要特别说明。
洛谷题面中也提示:截至 2025 年 3 月,本题可能超出了 GESP 考纲范围;原根属于 NOI 大纲更高层级内容,相关的费马小定理、欧拉定理也不是五级常规内容。(洛谷)
如果作为公众号分类,建议不要把它放入五级常规训练主线,而是单独标注为:
数论拓展题 / 超纲题 / 兴趣题。
教学重点可以简单写成:
理解原根定义; 分解 ; 使用快速幂判断; 不建议作为五级必学内容。
按难度梯度整理
如果用于日常训练,不建议完全按照考试时间顺序刷题。
更合理的方式是按照能力梯度分层训练。
第一梯度:五级基础题
适合刚进入五级的学生。
这一阶段的目标是:让学生熟练掌握排序、基础数论、简单贪心和预处理思想。
第二梯度:五级核心题
适合学生已经掌握基础语法和常见算法后训练。
这一阶段是五级备考的重点。
这些题目覆盖了五级最常见的数论、预处理、贪心和枚举模型。
第三梯度:五级提高题
适合用来训练综合建模能力。
这一阶段的题目不只是套模板,需要学生根据数据范围和题目条件主动建模。
第四梯度:五级压轴与拓展题
适合作为专题学习后的综合训练。
其中 P11961 原根判断 建议单独标注为拓展题,不建议作为五级常规备考重点。