1432. 糖果传递

糖果传递问题(超详细的数论公式推导+贪心结论+均分问题) 我们可以将划红线的数值看成点,就是仓库选址的结论,若n 为奇数,那么最小选点就是中间点n>>1+1,若n是偶数,则是n>>1 ,n>>1+1都可以。接下来 n 行,每行一个整数 a[i],表示第 i 个小朋友初始得到的糖果的颗数。为啥会有个特殊式子产生呢?----因为这是一个环,我们要将这个环拉成一条直线。有 n 个小朋友坐成一圈,每人有 a[i] 个糖果。可以是正数或者负数,正数代表给出,负数代表索取。第一行输入一个正整数 n,表示小朋友的个数。同理,将 1式 + 2式 + 3式有。 阅读详情

信息学奥赛一本通 贪心算法

【题目描述】

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

【输入】

第一行一个正整数n≤1000000,表示小朋友的个数.

接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.

【输出】

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

【输入样例】

4
1
2
5
4

【输出样例】

4

【分析】

本题网上有许多题解,这里对于一些细节做一下阐述,以方便理解代码。

用x1...xn表示i小朋友给左边小朋友的糖果数量,正数为给予,负数为索取。根据分析可以列出一系列式子。

当前小朋友手头的糖果 - 给左边的糖果 + 右边给的糖果 = 平均值

a1 - x1 + x2 = average ==> x2 = x1 + average - a1 ==> x2 = x1 - (a1 - average)

a2 - x2 + x3 = average ==> x3 = x2 + average -a2  ==> x3 = x2 - (a2 - average) 

......

最终可以写成如下的式子:                      在数组c中存放了x1减号后面的一系列值,第一个数是0

x1 = x1 - 0                                                 ==>c[1] = 0

x2 = x1 - (a1 - average)                            ==>c[2] = c[1] + a[1] - average

x3 = x1 - (a1 -average + a2 - average)     ==>c[3] = c[2] + a[2] - average

......

xn = x1 - (a1 + ... an-1 - (n-1)*average)    ==>c[n] = c[n-1] + a[n-1] - average

c[1] = 0;
	for(int i = 2; i <= n; i++){
		c[i] = c[i-1] + a[i-1] - average;
	}

x1 + x2 + x3 +...+ xn的值最小,即移动代价最小才符合题目要求,题目求解转化为求点到所有点之间的距离和。先排序,取中位数点进行计算。

int mid = c[n / 2 + 1];
	//求点到所有点之间的距离和
	for(int i = 1; i <= n; i++){
		ans += abs(c[i] - mid);
	}

【完整代码】

#include <bits/stdc++.h>

long long a[1000005],c[1000005];
using namespace std;
int main(int argc, char *argv[]) {
	int n;
	long long sum = 0;
	cin >> n;
	for(int i  = 1; i <= n; i++){
		cin >> a[i];
		sum += a[i];
	}
	//计算平均值
	int  average = sum / n;
	
	/*
	x1...n表示i小朋友给左边小朋友的糖果数量,正数为给,负数为索取
	当前小朋友手头的糖果 - 给左边的糖果 + 右边给的糖果 = 平均值
	a1 - x1 + x2 = average ==> x2 = x1 + average - a1 ==> x2 = x1 - (a1 - average)
	......
	......
	最终可以写成如下的式子:                      ==>在数组c中存放了x1减去的一系列值,第一个数是0
	x1 = x1 - 0                               ==>c[1] = 0
	x2 = x1 - (a1 - average)                  ==>c[2] = c[1] + a[1] - average
	x3 = x1 - (a1 -average + a2 - average)    ==>c[3] = c[2] + a[2] - average
	......
	xn = x1 - (a1 + ... an-1 - (n-1)*average) ==>c[n] = c[n-1] + a[n-1] - average
	*/
	c[1] = 0;
	for(int i = 2; i <= n; i++){
		c[i] = c[i-1] + a[i-1] - average;
	}
	/*
	x1 + x2 + x3 +...+ xn的值最小,即移动代价最小才符合题目要求,转化为求点到所有点之间的距离和。
	先排序,取中位数点进行计算。
	*/
	//升序
	sort(c+1, c + n +1);
	
	long long  ans = 0;
	//队列的中位数
	int mid = c[n / 2 + 1];
	//求点到所有点之间的距离和
	for(int i = 1; i <= n; i++){
		ans += abs(c[i] - mid);
	}
		cout << ans;
	return 0;
		
	}

STM32多模式智能小车状态机设计与中断优先级实践 在嵌入式实时系统中,状态机是实现多任务协同与功能切换的核心范式。其本质是通过有限状态集合、明确转移条件和确定性动作,构建可预测、易维护的控制逻辑。基于STM32等资源受限MCU时,需兼顾状态调度效率、中断并发安全与硬件资源约束。关键技术价值体现在:提升系统模块解耦度、支持物理按键与蓝牙双源触发、保障实时响应不丢帧。典型应用场景包括智能小车多模运行(循迹、避障、遥控、定距跟随等)、工业设备工作模式切换及IoT终端低功耗状态管理。本文以STM32F103C8T6平台为例,深入解析全局模式变量设计、双通道状态切换 阅读详情

相关推荐

如何在两台电脑间,实现zotero文件和数据两种类型的双向同步

在完成本文配置后,可以在两台不同的电脑间,通过两步简单操作实现zotero数据和文件的双向同步,并且全程免费首先,打开zotero->编辑->首选项->高级->文件与文件夹,配置链接附件根目录以及数据存储位置,前者将pdf文件通过相对地址形式存于zotero中(而非真正的pdf文件),后者则是设置用户本地数据的地址建议设置在数据盘D盘,可以避免后续对盘名的修改(因为基本每个电脑都存在C盘和D盘)然后,同一页面下,打开同步,配置数据以及文件同步方式。数据同步保持默认即可,文件同步选择WebDav,然后去坚果云

weixin_43008154的博客 1万+

1432:糖果传递(思维)

【题目描述】 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。 【输入】 第一行一个正整数n≤1000000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. 【输出】 求使所有人获得均等糖果的最小代价。 【输入样例】 4 1 2 5 4 【输出样例】 4 我们将 a[i] 表示原来所拥有的糖, x[i] 表示为 i 传递的(正数表示得到,负数表示给出) 我们有 a[i] ...

C_Dreamy的博客 2000

高效利用ChEMBL数据库:从靶点查询到活性数据处理的完整指南

本文提供了高效利用ChEMBL数据库的完整指南,从靶点查询到活性数据处理。详细介绍了靶点精准定位、高级过滤技巧、数据导出优化以及活性数据清洗、特征工程和可视化等实战技巧,帮助药物研发人员快速获取和处理生物活性数据,提升工作效率。

weixin_29278805的博客 792

信息学奥赛一本通提高篇 1432:糖果传递 贪心算法

有n个小朋友坐成一圈,每人有ai个糖果。每人每次传递一个糖果代价为1。考虑如果以第i+1号小朋友为起点,则传递数量为其他传递数量与第i号小朋友向后传递数量的差值。解析:先以第1号小朋友为起点,算出每个小朋友需要向他后边的小朋友传递的糖果数量。时间限制: 1000 ms 内存限制: 65536 KB。接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.。第一行一个正整数n≤1000000,表示小朋友的个数.。那么选传递数量的中位数,就可以得到最小传递数量。

长春高老师编程 1563

1.安装EMQX服务器

阿里云;EMQX

hfh8130的博客 5311

【GPFS专题4】---IBM Spectrum Scale (GPFS) 原理详解

IBM Spectrum Scale(原名为 GPFS,General Parallel File System)是一种高性能、分布式的集群文件系统,专为大规模数据共享和并行访问设计。它允许多个客户端同时访问共享文件,提供高可用性、容错性和扩展性,广泛应用于高性能计算(HPC)、大数据分析、AI 训练和企业级存储场景。IBM Spectrum Scale 通过分布式架构、并行访问和智能数据管理,为企业提供了高性能、高可用、可扩展的存储解决方案。

jundao1997的专栏 778

糖果传递(数学 贪心 中位数)图文详解

思路:每个小朋友拥有糖果a[1]~a[N],第一个小朋友给出糖果数X1,第二个给出X2.X3....Xn.。 要求最小的代价,也就是min(|X1|+|X2|+....+|Xn|),先求出平均糖果数量ave(小朋友最终糖果数量),推导公式转化为求min(|X1-c1|+|X1-c2|+...+|X1-cn|),

weixin_52797843的博客 1012

xilinx原语及bank简介

图8是HP bank与HR bank的IO模块,其中PAD是FPGA的金属管脚,IOB是输入、输出引脚的控制模块。此时使用原语就可以只调用需要的组件,不需要去考虑其余组件参数设置,就方便很多,借助此次机会就对IDDR、ODDR、IDELAYE2、ODELAYE2、IDELAYCRTL、ISERDESE、OSERDESE等几个原语做了简要了解,并对原语的各个模式进行了仿真,本文最初是介绍IDDR的,但在介绍IDDR这些原语之前,还需要了解一下7系列FPGA bank的分类和区别,所以就有了本文。

qq_43416206的博客 413

糖果传递-----(数学推导)

https://ac.nowcoder.com/acm/contest/950/K 题目描述 有n个小朋友坐成一圈,每人有aia_iai​颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为1。求使所有人获得均等糖果的最小代价。 输入描述: 第一行有一个整数n,表示小朋友个数; 在接下来n行中,每行一个整数aia_iai​。 输出描述: 输出使所有人获得均等...

小糊涂的博客 3346

C#解析基恩士(KEYENCE)PLC数据:KV协议通信与实时监控实现

KV协议是基恩士PLC使用的一种专用通信协议,通常用于与上位机进行数据交换。KV协议通过RS-232C、RS-485、Ethernet等接口与上位机通信,支持多种数据类型的读写,包括但不限于位、字、双字、浮点数等。简洁易用:KV协议的通信格式简单,易于实现。支持多种数据类型:支持位数据、字数据、定长字符串等。高效实时性:能够提供较高的实时数据交换性能,适合实时监控应用。本文介绍了如何通过C#与基恩士KV系列PLC进行通信,实现数据的解析和实时监控功能。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1806

如何用 Claude Code 阅读和理解陌生代码

摘要: 在接手陌生代码时,Claude Code能显著提升理解效率。核心策略是结构化拆解而非逐行阅读: 从整体入手:先扫描目录结构、定位核心模块,建立项目地图; 聚焦关键路径:通过数据流追踪、异常逻辑分析,识别技术债与风险点; 规避常见错误:避免抽象提问或一次性提交全部代码,应分模块精准提问; 高阶应用:可生成逻辑分层图、标记高复杂度区域,甚至定制阅读顺序。 最终目标是通过结构优先的提问策略,将理解周期从数天压缩至数小时。

sg_knight的专栏 1019

1432:糖果传递

1432:糖果传递 (ybt 太毒瘤了,这个题输出答案要用cout , printf不行) 洛谷:P2512 [HAOI2008]糖果传递 题解 每人每次传递一个糖果代价为1 每人每次传递一个糖果代价为1 每人每次传递一个糖果代价为1 代码 #include<bits/stdc++.h> using namespace st...

weixin_30500473的博客 525

第11.4节 混合储能系统能量管理

混合储能系统(HESS)的能量管理策略采用分层架构实现多时间尺度优化:调度层(小时级)进行经济优化,协调层(秒级)基于频率分解分配功率,执行层(毫秒级)实现快速跟踪。深度强化学习(DRL)方法通过定义状态空间、动作空间和多目标奖励函数,能有效处理系统不确定性和多目标优化问题。HESS性能评估需综合技术指标(如调节性能Kp值、设备寿命指标)和经济指标(净现值NPV、平准化储能成本LCOS),并遵循"建模-仿真-实验"的闭环流程。

技术工作者 245

信息学奥赛一本通 糖果传递 1432

1432:糖果传递 这是本蒟蒻 写的第一篇博客,若有不足请见谅 一本通原题链接 洛谷:P2512 [HAOI2008]糖果传递 【题目描述】 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。 【输入】 第一行一个正整数n≤1000000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗 数. 【输出】 ...

GODAlory的博客 700

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

P2512 [HAOI2008]糖果传递 & 1432:糖果传递

一本通传送门 洛谷传送门 洛谷大神们的题解 本蒟蒻就不献丑了 代码 #include<bits/stdc++.h> using namespace std; long long n,m,a[1000001],s[1000001],mid,sum,ans; inline long long read(){ long long k=0,k1=1; char ch=getchar(); while(!isdigit(ch)){ if(ch=='-') k1=-1; ch=getcha.

jqsh_的博客 305

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

糖果传递(信息学奥赛一本通-T1432)

【题目描述】 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。 【输入】 第一行一个正整数n≤1000000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. 【输出】 求使所有人获得均等糖果的最小代价。 【输入样例】 4 1 2 5 4 【输出样例】 4 【源程序】 #includ...

Alex_McAvoy的博客 1650

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

第1部分 基础算法(提高篇)--第1章 贪心算法-1432:糖果传递

1432:糖果传递 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 999 通过数: 452 【题目描述】 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。 【输入】 第一行一个正整数n≤1000000,表示小朋友的个数. 接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数. 【输出】 求使所有人获得均等糖果的最小代价。 【输入样例】 4 1 2 5 4 【输出样例】 4 思路: 最终每个小朋友的糖果

zqhf123的博客 1216

Sicily 2505. 糖果传递

2505. 糖果传递 Constraints Time Limit: 2 secs, Memory Limit: 256 MB Description  老师准备了一堆糖果, 恰好n个小朋友可以分到数目一样多的糖果. 老师要n个小朋友去拿糖果,然后围着圆桌坐好, 第1个小朋友的左边是第n个小朋友, 其他第i个小朋友左边是第i-1个小朋友.大家坐好后, 老师发现,

Nightonke's Blog 650

糖果传递

题目链接 分析过程 1->2->3->4->...->n->1 构成一个环 x1 x2 x3 x4 .... xn xi表示xi给xi+1糖果的个数,xi可正可负可为零。 本题要求|x1|+|x2|+|x3|+.....+|xn|的最小值。 限制条件:最后每个人获得均等糖果。 av表示平均值,a数组表示每个人初始糖果的数量。 a[1]...

optimjie的博客 1118

洛谷 P2512 [HAOI2008]糖果传递

题目 题目大意 有n个小朋友坐成一圈,每人有a_i颗糖果。 每人只能给左右两人传递糖果。 每人每次传递一颗糖果的代价为1。 求使所有人获得均等糖果的最小代价。 对于100%的数据,n<=10^6。 题目分析 有一..难。不要着急。 我搞明白了! 设x[i]表示i+1向i传的糖果数,x[n]表示1向n传的糖果数   a[1]+x[1]−x[n]=   a[...

xxxLJYing的博客 400

糖果传递(贪心)

贪心

m0_64363046的博客 222

caioj1696、luogu2512 糖果传递

题意 有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。求使所有人获得均等糖果的最小代价。   题解 中位数的运用 当出现求Σ|a[i]-k|(其中k待定)的最小值,可以用货仓选址来解决。 这题比较复杂,需要推导公式后才能发现。 尽管糖果给的方向不一定,但我们可以总的看成往左给。即设p[i]表示i传出给i-1 p[i]个糖果。 所以cos...

A_Bright_CH的博客 403

糖果传递 (数学题)

糖果传递                                                                                                                                                              Time Limit: 2000ms

LYHVOYAGE的专栏 2468
上一篇: 1431. 钓鱼
下一篇: 1433.【例题1】愤怒的牛
mapleleafcn
博客等级 码龄16年 55粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值