GESP认证C++编程真题解析 | B4359 [GESP202506 三级] 分糖果
欢迎大家订阅我的CSDN专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!
专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。
适合人群:
- 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
- 希望系统学习C++/Python编程的初学者
- 想要提升算法与编程能力的编程爱好者
附上汇总帖:GESP认证C++编程真题解析 | 汇总
【题目来源】
洛谷:[B4359 GESP202506 三级] 分糖果 - 洛谷
【题目描述】
有 \(n\) 位小朋友排成一队等待老师分糖果。第 \(i\) 位小朋友想要至少 \(a_i\) 颗糖果,并且分给他的糖果数量必须比分给前一位小朋友的糖果数量更多,不然他就会不开心。
老师想知道至少需要准备多少颗糖果才能让所有小朋友都开心。你能帮帮老师吗?
【输入】
第一行,一个正整数 \(n\),表示小朋友的人数。
第二行,\(n\) 个正整数 \(a_1,a_2,…,a_n\),依次表示每位小朋友至少需要的糖果数量。
【输出】
输出一行,一个整数,表示最少需要准备的糖果数量。
【输入样例】
4
1 4 3 3
【输出样例】
16
【算法标签】
《洛谷 B4359 分糖果》 #贪心# #数组# #GESP# #2025#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
#define int long long // 定义int为long long类型
const int N = 1005; // 定义数组最大长度
int n; // 输入的数字个数
int a[N]; // 存储原始数字数组
int s[N]; // 存储处理后的数字数组
int ans = 0; // 存储最终结果
signed main()
{
// 输入数字个数
cin >> n;
// 输入n个数字
for (int i = 1; i <= n; i++)
cin >> a[i];
// 处理数组,确保s[i]至少比前一个大1
for (int i = 1; i <= n; i++)
s[i] = max(a[i], s[i - 1] + 1);
// 计算处理后数组的总和
for (int i = 1; i <= n; i++)
{
ans += s[i];
}
// 输出最终结果
cout << ans << endl;
return 0;
}
【运行结果】
4
1 4 3 3
16

浙公网安备 33010602011771号