“掌握数据分组与聚合,2026年3月考试轻松应对
各位备战2026年3月GESP三级考试的同学们,我是老马。通过分析2023年9月的《小杨的储蓄》和2025年12月最新的《小杨的智慧购物》,我发现了一个重要规律:数据处理类算法,特别是数据分组聚合技术,已经成为GESP三级考试的稳定考查点。
【提交】
https://www.luogu.com.cn/problem/B3867
【问题描述】
小杨共有 个储蓄罐,编号从0到 。从第1天开始,小杨每天都会往存钱罐里存钱。具体来说,第 天他会挑选一个存钱罐 ,并存入 元钱。过了 天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?
【输入描述】
输入2行,第一行两个整数 ;第二行 个整数,其中第 个整数为 (保证 )。
每行的各个整数之间用单个空格分隔。
保证 ;
【输出描述】
输出 个用单个空格隔开的整数,其中第 个整数表示编号为 的存钱罐中有多少钱()。
【特别提示】
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
【样例输入1】
2 30 1 0【样例输出1】
4 2【样例解释1】
小杨在第1天、第2天、第3天分别向0号、1号、0号存钱罐存了1元钱、2元钱、3元钱,因此0号存钱罐有1+3=4元钱,而1号存钱罐有2元钱。
【样例输入2】
3 50 0 0 2 0【样例输出2】
11 0 4数据处理任务:按储蓄罐编号分组,累加每组的存款金额
算法核心:
int b[1005] = {0}; // 分组存储数组for (int i = 0; i < D; i++) {int a; // 键:储蓄罐编号cin >> a; b[a] += (i + 1); // 聚合操作:累加}【提交】
https://www.luogu.com.cn/problem/B4450
【问题描述】
小杨的班级要举办一个环保手工作品展览,老师请小杨去文具店购买 种不同的文具(例如:铅笔、橡皮、尺子等)。
商店里共有 件文具,每件文具都有一个种类编号(从 到 )和价格。
小杨的预算有限,他想了一个聪明的办法:对于每种文具,他只买最便宜的那一件(如果同种文具有多件价格相同且都是最便宜的,他只会购买其中的一件)。请你帮小杨计算出,买齐这 种文具一共需要花费多少钱。
【输入描述】
第一行两个正整数 ,代表文具的种类数和总数。
之后 行,每行两个正整数 和 ,分别代表第 件文具的种类编号和它的价格。数据保证每个种类至少有一件文具可供购买。
【输出描述】
输出一行,代表购买文具的总价。
【样例输入1】
2 51 11 21 12 32 10【样例输出1】
4【样例解释】
文具清单如下:
小杨的选择过程:对于种类 1:有三件商品,价格分别为 。其中最便宜的价格是 。对于种类 2:有两件商品,价格分别为 。其中最便宜的价格是 。
计算总价:小杨购买这两类文具的总花费为 。
【数据范围】
对于所有测试点,保证 。
数据处理任务:按文具种类分组,找出每组的最低价格
算法核心:
int arr[100005] = {0}; // 分组存储数组for (int i = 0; i < N; i++) {int k, p; // 键:种类编号,值:价格cin >> k >> p;if (arr[k] == 0 || p < arr[k]) { arr[k] = p; // 聚合操作:求最小值 }}// 1. 初始化分组数组数据类型 group[最大键值+1] = {初始值};// 2. 数据输入与处理for (int i = 0; i < 数据量; i++) { 键类型 key = 获取键值; 值类型 value = 获取数值;// 根据聚合类型更新组内值 group[key] = 聚合函数(group[key], value);}// 3. 结果处理for (int i = 起始键; i <= 结束键; i++) { 输出或统计 group[i];}| 累加求和 | group[key] += value | ||
| 求最小值 | group[key] = min(group[key], value) | ||
| 求最大值 | group[key] = max(group[key], value) | ||
| 计数统计 | group[key]++ |
与模拟算法相比,数据处理算法更注重:
第一阶段(现在-1月底):基础掌握
第二阶段(1月底-2月中旬):真题训练
第三阶段(2月下旬-3月初):综合应用
第四阶段(考前一周):巩固提升
// 求最小值初始化int minValues[MAX] = {0};for (int i = 0; i < MAX; i++) { minValues[i] = INT_MAX; // 设为极大值}// 键值从1开始的情况for (int i = 0; i < n; i++) {int key, value;cin >> key >> value; group[key] = 聚合操作(group[key], value);}// 安全的索引访问if (key >= 0 && key < MAX_SIZE) { group[key] = 聚合操作(group[key], value);}数据处理算法是GESP三级考试的重要基础考点,通过掌握数据分组聚合的核心思想,同学们可以轻松应对相关题目。2026年3月的考试很可能继续考查这类算法,建议考生重点掌握:
相信通过系统准备,大家一定能在考试中取得优异成绩!
青少年编程竞赛交流
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),添加小助手微信,让他邀请大家进入学习群。进群之后大家可以参与定期组织的21天刷题打卡、等级考试测评、教育部白名单比赛辅导以及青少年编程组队竞赛等活动。
