2026年6月GESP真题及题解(C++五级):排排坐

2026年6月GESP真题及题解(C++五级):排排坐

题目描述

老师正在和小朋友们分糖果。

小朋友们先在自己的手上写一个数字,然后坐成一排。

老师分发糖果的规则是:每个小朋友获得自己以及左侧所有小朋友的手上数字之和个糖果。

现在小朋友们都已经在自己手上写上了数字。

请帮小朋友们安排合适的座位顺序,使得小朋友们分到的糖果总量最大,输出这个最大值。

输入格式

输入 2 2 2 行,

第一行为一个正整数 n n n,表示小朋友的个数;

第二行为 n n n 个正整数 a 1 , a 2 , ⋯   , a n a_1, a_2, \cdots, a_n a1,a2,⋯,an,表示小朋友们手上的数字,整数之间以空格分隔。

输出格式

输出一个整数,表示小朋友们可能分到的最大糖果总数量。

输入输出样例 1
输入 1
复制代码
5
7 5 8 9 3
输出 1
复制代码
111
说明/提示
样例解释

小朋友安排座位后从左向右每人手上数字依次是: 9 , 8 , 7 , 5 , 3 9, 8, 7, 5, 3 9,8,7,5,3。

这时可以得到最多的糖果: ( 9 ) + ( 9 + 8 ) + ( 9 + 8 + 7 ) + ( 9 + 8 + 7 + 5 ) + ( 9 + 8 + 7 + 5 + 3 ) = 111 (9) + (9 + 8) + (9 + 8 + 7) + (9 + 8 + 7 + 5) + (9 + 8 + 7 + 5 + 3) = 111 (9)+(9+8)+(9+8+7)+(9+8+7+5)+(9+8+7+5+3)=111。

数据范围

1 ≤ n ≤ 1000 1 \le n \le 1000 1≤n≤1000, 1 ≤ a i ≤ 1000 1 \le a_i \le 1000 1≤ai≤1000。

思路分析

  1. 问题转化

    设有排列 p 1 , p 2 , ... , p n p_1, p_2, \dots, p_n p1,p2,...,pn,第 i 个小朋友得到的糖果数是前缀和 S i = ∑ j = 1 i p j S_i = \sum_{j=1}^{i} p_j Si=∑j=1ipj。

    总糖果数为 ∑ i = 1 n S i = ∑ i = 1 n ( n − i + 1 ) ⋅ p i \sum_{i=1}^n S_i = \sum_{i=1}^n (n-i+1) \cdot p_i ∑i=1nSi=∑i=1n(n−i+1)⋅pi

    也就是说,位置越靠左(i 越小),其数字被累加的次数越多(权重越大)。

  2. 排序不等式

    为了最大化加权和,应当将较大的数字放在权重较大的位置,即按数字从大到小排列。

    因此只需将原数组降序排序,然后计算 ∑ i = 1 n ( n − i + 1 ) ⋅ a i ′ \sum_{i=1}^n (n-i+1) \cdot a_i' ∑i=1n(n−i+1)⋅ai′,其中 a i ′ a_i' ai′ 是降序排列后的数字。

  3. 实现方式

    可以直接累加前缀和:排序后从左到右维护当前前缀和 pre,每次将 pre 累加到答案 ans 中,最终 ans 即为最大值。


代码实现

cpp 复制代码
#include <bits/stdc++.h> 
using namespace std;

int n, a[1005]; // n:人数, a:数字数组
bool cmp(int a,int b){
    return a>b;
}
int main() {
    cin >> n;  
    for (int i = 0; i < n; i++) cin >> a[i]; 

    sort(a, a + n, cmp); // 降序排序

    long long ans = 0, pre = 0; // ans:最终答案, pre:当前前缀和
    for (int i = 0; i < n; i++) {
        pre += a[i]; // 更新前缀和
        ans += pre;  // 将前缀和累加到答案中
    }

    cout << ans; // 输出最大总糖果数
    return 0;
}

功能分析

  • 输入处理 :读取人数 n 和 n 个数字,存入数组 a
  • 排序 :使用 sort 配合 cmp函数 将数组按从大到小排列,保证最大的数字放在最左边(权重最大)。
  • 计算答案
    遍历排序后的数组,维护 pre(当前位置及左侧所有数字之和),每遍历一个位置就将 pre 累加到 ans 中。
    由于 pre 正好等于该位置小朋友获得的糖果数,累加所有 pre 即得到总糖果数,且因排序保证了最优。
  • 输出 :输出 ans 即为可能的最大值。

各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
郝学胜-神的一滴2 小时前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
开发语言·c++·qt·程序人生·软件开发·用户界面
不会写代码的ys2 小时前
C++复习篇
java·开发语言·c++
aichitang20242 小时前
数论变换(NTT)
c++·算法·fft·ntt
_olone2 小时前
AtCoder Beginner Contest 465 D - X to Y
c++·算法
星夜夏空993 小时前
C++学习(3) —— C++输入输出流
c++·学习
CAU界编程小白3 小时前
CAU抢课脚本
c++·脚本
MOONICK3 小时前
windows原生条件变量支持
c++·windows
汉克老师3 小时前
GESP2026年6月认证C++二级( 第三部分编程题(1、完全平方数计数))精讲
c++·循环·枚举算法·gesp2级·平方数·逆向枚举·区间判断
wuminyu3 小时前
markword在高并发场景下变化剖析
java·linux·c语言·jvm·c++