当前位置: 首页 > news >正文

csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:糖果传递

csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:糖果传递

题目描述

n nn个小朋友坐成一圈,每人有a i a_iai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1 11

输入格式

小朋友个数n nn,下面n nna i a_iai

输出格式

求使所有人获得均等糖果的最小代价。

输入输出样例 1
输入 1
4 1 2 5 4
输出 1
4
说明/提示

对于100 % 100\%100%的数据1 ≤ n ≤ 10 6 1 \leq n\le 10^61n1061 ≤ a i ≤ 1.5 × 10 9 1 \leq a _ i \leq 1.5 \times 10 ^ 91ai1.5×109∑ i = 1 n a i \sum_{i=1}^{n}{a_i}i=1nain nn的倍数。

思路分析

这是一个经典的环形均分纸牌问题。设总糖果数为sum,平均值为avg = sum / n。定义c[i] = a[i] - avg,表示第i个人与平均值的差值。设x[i]表示第i个人给第i+1个人的糖果数(可为负,负表示反向传递),则最终每个小朋友的糖果数变为a[i] - x[i] + x[i-1](下标模n)。令其等于avg,得到:

x[i] = x[i-1] + c[i]

定义前缀和s[0] = 0s[i] = s[i-1] + c[i],则x[i] = x[0] - s[i-1]。总代价为∑|x[i]| = ∑|x[0] - s[i-1]|i从 1 到n)。该式在x[0]s[0], s[1], …, s[n-1]的中位数时最小。因此只需计算前缀和数组s,排序后取中位数,再累加绝对差即可。

时间复杂度O(n log n),空间复杂度O(n),可通过n ≤ 10^6的数据。

代码实现

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=1e6+5;intn;ll a[N],s[N];// a:原糖果数, s:前缀和(差值累积)intmain(){// 加速输入输出ios::sync_with_stdio(false);cin.tie(0);cin>>n;ll sum=0;for(inti=1;i<=n;++i){cin>>a[i];sum+=a[i];}ll avg=sum/n;// 平均值// 计算前缀和s[i] = sum_{j=1}^{i} (a[j] - avg)// s[0] = 0 隐含,数组从1开始存s[1..n-1],最后需要0..n-1共n个值s[0]=0;for(inti=1;i<n;++i){s[i]=s[i-1]+(a[i]-avg);}// 注意:s[n-1] = sum_{1}^{n-1} (a[i]-avg) = - (a[n]-avg)// 因此总共n个值:s[0], s[1], ..., s[n-1]// 排序这n个值sort(s,s+n);// 取中位数ll med=s[n/2];// 计算最小代价ll ans=0;for(inti=0;i<n;++i){ans+=abs(s[i]-med);}cout<<ans<<"\n";return0;}

功能分析

  1. 输入处理:使用ios::sync_with_stdio(false)cin.tie(0)加速,读取小朋友个数n及每个人的糖果数a[i],同时计算总糖果数sum
  2. 平均值计算avg = sum / n,因为题目保证总和是n的倍数,故avg为整数。
  3. 构造前缀和数组s[0] = 0s[i] = s[i-1] + (a[i] - avg)i=1..n-1)。得到n个值s[0] ~ s[n-1]
  4. 排序取中位数:对s数组排序,中位数为s[n/2](下标从0开始)。
  5. 计算最小代价:遍历所有s[i],累加|s[i] - med|,结果即为最小传递代价。
  6. 输出:打印答案。

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

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

【秘籍汇总】(完整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信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):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 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
http://www.jsqmd.com/news/654716/

相关文章:

  • 【DVWA靶场攻坚】——High级别SQL注入:绕过会话隔离与LIMIT 1的实战剖析
  • Qwen All-in-One应用案例:打造你的专属情感分析聊天助手
  • GLM-4.1V-9B-Base效果展示:中文OCR弱项补充——无文字图像语义补全
  • 洛雪音乐助手:免费开源的跨平台音乐播放器终极指南
  • 从零到一:手把手教你用Polygon与testlib.h打造Codeforces高质量赛题
  • 如何快速解锁加密音乐文件:Unlock Music 终极指南
  • 影刀RPA开发实战案例:融合AI大模型打造电商3.0无人值守铺货流
  • 使用GitHub Actions实现DeOldify模型的CI/CD:自动测试与镜像构建
  • 终极暗黑2存档编辑器指南:3分钟学会角色定制与数据优化 [特殊字符]
  • 从MUSIC到l1-SVD:用MATLAB/CVX工具箱复现稀疏DOA估计,对比实验避坑指南
  • HideMockLocation终极指南:5步隐藏Android模拟位置设置
  • 空洞骑士模组管理革命:Scarab如何用3个步骤彻底改变你的游戏体验
  • 题解:AcWing 3706 不连续1的子串
  • 分布式锁实现方案对比
  • SocialEcho API接口完整参考:RESTful设计规范与使用示例
  • RimSort:3分钟掌握环世界MOD管理,告别加载顺序混乱的终极指南
  • 基于微信小程序实现停车共享管理系统【项目源码+论文说明】
  • 使用LaTeX与PDF-Extract-Kit-1.0构建学术写作工具链
  • 如何快速实现Android折叠展开效果:ExpandableLayout实战解析
  • 如何用Supersonic打造你的专属音乐中心:从零开始的完美音乐体验
  • Android Studio中文界面终极指南:5分钟让英文IDE变母语开发环境
  • [CentOS]Chkrootkit后门检测工具的实战应用与安全加固
  • 5分钟快速上手:3DS游戏转换工具终极指南
  • Java的java.util.SequencedCollection序列集合与双向迭代的新增接口
  • 7步完全掌握Source Han Serif CN:免费开源中文字体的终极配置指南
  • KMS_VL_ALL_AIO:3分钟终极指南,轻松激活Windows与Office
  • Hotkey Detective:基于Windows钩子技术解决热键冲突的智能检测方案
  • ESP32 OTA升级实战:从零配置HTTP服务器到一键更新固件(含常见报错排查)
  • 2026工业级AI智能体实战:OpenClaw+ONNX Runtime端到端部署,7x24小时无人值守产线落地
  • OpenTelemetry Java Instrumentation 部署实战:生产环境配置指南