GESP C++ 五级真题分类整理:从基础算法到综合建模

四季读书网 3 0
GESP C++ 五级真题分类整理:从基础算法到综合建模

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 五级] 成绩排序

这是一道非常典型的结构体排序题。

题目要求按照多级规则排序:

  1. 总分高者靠前;
  2. 总分相同,看语文和数学总分;
  3. 仍相同,看语文和数学最高分;
  4. 仍相同,并列。

教学重点:

  • 用结构体保存每名同学的信息;
  • 自定义排序规则;
  • 并列排名的处理;
  • 最后要按照输入顺序输出排名,而不是按照排序后顺序输出。

这题适合作为五级排序专题的入门题。

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 大纲更高层级内容,相关的费马小定理、欧拉定理也不是五级常规内容。(洛谷)

如果作为公众号分类,建议不要把它放入五级常规训练主线,而是单独标注为:

数论拓展题 / 超纲题 / 兴趣题。

教学重点可以简单写成:

  • 理解原根定义;
  • 分解 
  • 使用快速幂判断;
  • 不建议作为五级必学内容。

按难度梯度整理

如果用于日常训练,不建议完全按照考试时间顺序刷题。

更合理的方式是按照能力梯度分层训练。

第一梯度:五级基础题

适合刚进入五级的学生。

题目
主要考点
B3871 因数分解
质因数分解
B3968 成绩排序
结构体排序、排名
P10720 小杨的幸运数字
质因子种类统计
P15798 有限不循环小数
数论性质、枚举
P15799 找数
排序、双指针、集合交集
P11960 平均分配
差值排序贪心

这一阶段的目标是:让学生熟练掌握排序、基础数论、简单贪心和预处理思想。

第二梯度:五级核心题

适合学生已经掌握基础语法和常见算法后训练。

题目
主要考点
B3929 小杨的幸运数
筛法标记、预处理
B3969 B-smooth 数
最大质因子、筛法
P10719 黑白格
二维前缀和、矩形枚举
B4050 挑战怪物
质数判断、二进制求和
B4051 小杨的武器
贪心、正负贡献
P13014 最大公因数
GCD 性质、差分思想
P14073 数字选取
互质关系、质数计数

这一阶段是五级备考的重点。

这些题目覆盖了五级最常见的数论、预处理、贪心和枚举模型。

第三梯度:五级提高题

适合用来训练综合建模能力。

题目
主要考点
B3872 巧夺大奖
截止时间调度贪心
B3930 烹饪问题
位运算贪心
B4070 奇妙数字
质因数分解、指数贪心
B4071 武器强化
枚举目标、贪心统计
P13013 奖品兑换
二分答案、数学不等式
P14074 有趣的数字和
二进制计数、数位 DP 思想

这一阶段的题目不只是套模板,需要学生根据数据范围和题目条件主动建模。

第四梯度:五级压轴与拓展题

适合作为专题学习后的综合训练。

题目
主要考点
P14917 数字移动
二分答案、序列合法性判断
P14918 相等序列
质因数分解、中位数最优
P11961 原根判断
原根、快速幂、数论拓展

其中 P11961 原根判断 建议单独标注为拓展题,不建议作为五级常规备考重点。

抱歉,评论功能暂时关闭!