1

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
posted @ 2026-01-16 15:04  热爱编程的通信人  阅读(0)  评论(0)    收藏  举报