GESP 1 级
大题核心考点
1 级主要考查分支和循环结构,所以大题的解法一般都是一个 for 循环,然后循环里面用 if 之类的条件判断做一些事情,最后再输出结果。其代码框架为:
1 | // 循环结构, 例如 for ... |
拿 GESP202309 一级题目:小明的幸运数 来说,其核心代码是:
1 | // 循环 |
另外一个例子,GESP202503 一级题目:四舍五入,核心代码:
1 | // 循环 |
GESP 2 级
大题核心考点
考点一:双重循环
GESP 2 级相对 1 级,对循环结构的考查进行了加强,一般需要用双层嵌套的循环才能完成大题。有一类双层嵌套循环需要特别关注,就是模拟输出类,这一类题过去考过多次,包括:
- GESP202309,小杨的 X 字矩阵
- GESP202312,小杨的 H 字矩阵
- GESP202403,小杨的日字矩阵
- GESP202409,小杨的 N 字矩阵
- GESP202503,等差矩阵
- GESP202303,画三角形
- 样题,画正方形
以等差矩阵为例,其关键代码为嵌套的 for 循环,参考如下:
1 | /** |
如果学生还是不熟悉,可以考虑如下更多的练习:
- 模仿 小杨的 X 字矩阵,输出 “又” 字,倒 “N” 字,“工” 字矩阵,“口”字矩阵
- 模仿 画三角形,输出 左对齐、右对齐的正三角形,倒三角形
- 模仿 等差矩阵,输出求和的矩阵,输出只有偶数的等差矩阵(奇数位填
*)
有一些时候,双重循环也不一定以输出图案的方式来进行考查,比如题目 B4356 202506 二级 数三角形 就是一个案例,参考代码如下:
1 | /** |
更多的练习题目如下:
- https://www.luogu.com.cn/problem/B3994
- https://www.luogu.com.cn/problem/B3995
- https://www.luogu.com.cn/problem/B3986
- https://www.luogu.com.cn/problem/B3988
解题思路
对于双重循环输出图形,解题的关键在于:分析图形所代表的序列。例如图形:
1 | +---+ |
对应的序列是
(1,1)(2,2)(3,3)(4,4)(5,5)(1,5)(2,4)(3,3)(4,2)(5,1)
然后,我们在做双重循环输出的时候,已经有两个序列 i 和 j,分别表示行号和列号。
我们可以分析 i 和 j 与我们需要输出的数据有什么关系,最后就会发现,规律是 i == j 或者 i+j == n+1
我们再看一个复杂的:
1 | ..#.. |
它对应的序列不太好找规律,我们可以用两个变量 a 和 b,分别表示每一行需要输出的 y 坐标。
刚开始 (a,b)=(3,3),然后:
- 对于上半部分,每增加一行,
a--,b++。 - 对下下半部分,每增加一行,
a++,b--。
我们再看一些更复杂的:
1 | ..#....#.. |
或:
1 | ..#...#.. |
都可以用刚刚找到的思路来解决。
但对于更复杂的图形,就得再想办法,比如
这类题目需要根据题目的输出要求,思考问题拆解的办法,每道题的解法可能都不一样。
考点二:常用函数
2 级还会考一些我们经常会实现的函数。包括:
求素数函数
参考题目:GESP202306 找素数
1 | bool isPrime(int a) { |
更多练习:
求闰年函数
参考题目:GESP202503 时间跨越
关键代码:
1 |
|
把一个数的每一位数字拆分的写法
参考题目:GESP202406 计数
关键代码:
1 | int count(int a, int k) { |
练习题目:
GESP 3 级
选择、判断题核心考点
- 原码,返码,补码的表示
- 进制转换(二进制、八进制、十进制、十六进制)
- 位运算
- 字符串相关的操作
大题核心考点
考点一:字符串操作
3 级对字符串的操作要求非常高,需要考生灵活掌握字符串的变换、拼接、求子串、判断回文等操作。
求子串可以用 string 类的 substr(int pos, int len) 函数。需要注意该函数的两个参数分别是起始下标和长度。
其中,判断回文的写法如下:
1 | bool isReverse(string &s) { |
以真题 GESP202409 回文拼接 为例,考生需要对字符串进行切分,然后分别判断是否是回文串。
参考代码如下:
1 | /** |
该考点的相关真题:
其中 GESP202309 进制判断 看起来是考进制的规则,实际上也是考字符串的查找。参考代码如下:
1 | /** |
考点二:前缀和
前缀和的计算技巧是:用一个累加变量来不停地更新前 N 个数的和,这样我们只需要用 O(N)的时间复杂度,就可以把所有的前缀和求出来。
参考题目:GESP202409 平衡序列
此题解法是:暴力测试,先计算出总和 tot ,然后看前缀和的两倍有没有可能等于 tot。
参考代码:
1 | /** |
考点三:位运算
考生需要熟悉二进制,以及数的位运算操作。
典型考题为:GESP202503 2025
此题的思路如下:因为 x 最大是 2025,而如果 y 需要影响 x 的运算,只能与 x 的 bit 位是 1 的位进行操作。所以 y 如果存在,则必定小于 2048。因为 2048 的二进制 1 的 bit 位已经超过 2025 的最高位了。所以直接枚举 1~2048 之间的答案即可。
参考代码:
1 |
|
GESP 4 级
大题核心考点
考点比较散,以下是历次考题的考点。
- GESP-202306 幸运数:模拟
- GESP-202309 进制转换:进制转换
- GESP-202309 变长编码:位操作
- GESP-202312 小杨的字典:字符串操作
- GESP-202312 田忌赛马:排序,模拟
- GESP-202403 相似字符串:字符串操作
- GESP-202403 做题:贪心
- GESP-202406 黑白方块:枚举
- GESP-202406 宝箱:枚举,二分
- GESP-202409 黑白方块:枚举
- GESP-202409 区间排序:排序
- GESP-202412 Recamán:枚举
- GESP-202412 字符排序:排序
- GESP-202503 荒地开垦:枚举
- GESP-202503 二阶矩阵:枚举
- GESP-202509 排兵布阵:枚举
- GESP-202509 最长连续段:排序
其中,比较常考的考点:
- 枚举:考了 7 次。
- 排序:考了 4 次。
- 字符串操作:考了 2 次。
GESP 5 级
大题核心考点
待补充
GESP 6 级
大题核心考点
最近公共祖先
动态规划
包括 01 背包和完全背包:
基础动态规划:
记忆化搜索:
复杂贪心:
其它
树状数组:
暴力枚举:
模拟+高精度:
相关练习题目
背包
从 这儿 可以获得洛谷上所有的背包相关题目,推荐练习的如下:
- P1734 最大约数和
- P1507 NASA的食物计划
- P1164 小A点菜
- P1060 NOIP 2006 普及组 开心的金明
- P1358 扑克牌
- P1877 HAOI2012 音量调节
- P1910 L 国的战斗之间谍
- P1926 小书童——刷题大军
- P1855 榨取kkksc03
- P2430 严酷的训练
- P1802 5 倍经验日
- P1757 通天之分组背包
GESP 7 级
大题核心考点
动态规划
背包: