UVA11300 Spreading the Wealth

思路

 对于这道题,我们可以将其转化为一道线性代数的问题,设第iii个人的初始值为AiA_{i}Ai​,第iii个人给第i−1i-1i−1个人的金币数目为xix_{i}xi​,设最终值为avgavgavg,我们可以得到这样一个等式A1−x1+x2=avgA_{1}-x_{1}+x_{2}=avgA1​−x1​+x2​=avg,设C1=A1−avgC_{1} = A_{1}-avgC1​=A1​−avg得到x1−x2=C1→x2=x1−C1(1)x_{1}-x_{2}=C_{1}\to x_{2}=x_{1}-C_{1}(1)x1​−x2​=C1​→x2​=x1​−C1​(1)

 根据这个式子我们对下面递推的式子进行处理A2−x2+x3=avg→x2−x3=A2−avg→x3=x2−A2+avg(2)A_{2}-x_{2}+x_{3}=a vg\to x_{2}-x_{3}=A_{2}-avg\to x_{3}=x_{2}-A_{2}+avg(2)A2​−x2​+x3​=avg→x2​−x3​=A2​−avg→x3​=x2​−A2​+avg(2)

 将(1)(1)(1)式带入(2)(2)(2)式后,得到x3=x1−C2(C2=A1+A2−2avg)x_{3}=x_{1}-C_{2}(C_{2}=A_{1}+A_{2}-2avg)x3​=x1​−C2​(C2​=A1​+A2​−2avg)

 有这个式子我们可以对下面的n个式子进行递推,可以得到xn=x1−Cn−1x_{n}=x_{1}-C_{n-1}xn​=x1​−Cn−1​,而Cn−1C_{n-1}Cn−1​我们是可以解出来的,所以只剩下一个变量x1x_{1}x1​,这个式子就变成了一个单变量极值的题目,他的几何意义可以概括为:在一条坐标轴上,有n个坐标分别为C1,C2...CnC_{1},C_{2}...C_{n}C1​,C2​...Cn​的点,我们要求这个数轴上一点到这个n个数距离之和的最小值,因为这个是一个环,所以最后一点得到的结果为x1x_{1}x1​

 要求的结果就是min⁡∣x1∣+∣x1−C1∣+....∣x1−Cn−1∣\min{|x_{1}|+|x_{1}-C_{1}|+....|x_{1}-C_{n-1}|}min∣x1​∣+∣x1​−C1​∣+....∣x1​−Cn−1​∣,对于这个式子的解,我们可以得到当x1x_{1}x1​等于所有点的中位数的时候是最小的。证明这个结论只需要将这个点置于中点,然后向任意一边进行移动可以发现这个数值都是在变大

对于点个数为偶数的情况x1x_{1}x1​只需要在中间两个点的区间内即可

code

#include<iostream>
#include<algorithm>
#define N 1010000
#define ll long long
using namespace std;
ll A[N],C[N],sum,m;
int main()
{int n;while(scanf("%d",&n)==1){sum = 1;for(int i = 1;i <= n;i++){scanf("%lld",&A[i]);sum += A[i];}ll avg = sum/n;C[0] = 0;for(int i = 1;i < n;i++) C[i] = C[i-1] + A[i] - avg;sort(C,C+n);ll mid = C[n/2],ans = 0;for(int i = 0;i < n;i++) ans += abs(mid - C[i]);printf("%lld\n",ans);}return 0;
}

UVA11300 Spreading the Wealth相关推荐

  1. UVa11300 - Spreading the Wealth

    题意 n个人围成一圈,每个人都有一定数量的金币,金币总数可被n整除,现可将手中金币给左右相邻的人,最终使每人手中的金币数相等,求最少转移的金币数量. 思路 设a[i]给了a[i-1]x1个金币,从a[ ...

  2. UVa11300 Spreading the Wealth(数学问题)

    题意:给出n个人,每个人有一些金币,可以给一些金币左边或者右边的人,最终使得每个人有相同的金币,问最小的转移金币是多少? 思路:可以假定给金币方向是逆时间方向,值可能是正负.M表示最终每个人有的金币, ...

  3. UVA11300 Spreading the Wealth 分金币 C++ (数学推导)

    参考算法竞赛入门经典训练指南 /* 最后每个人的金币:M = (A1+A2+...+An)/n(设当前每个人的金币为Ai) 设xi表示i给i+1传递给了xi个金币(xn表示n给1传递了xn个金币) 为 ...

  4. UVa11300 Spreading the Wealth 题解

    非常好的一道数学题. 原题链接(洛谷) 原题链接(UVa) 题目分析 (参考刘汝佳<算法竞赛入门经典 ⋅\cdot⋅ 训练指南>) 本身看起来很复杂.不要急,我们慢慢分析. 首先,每个人最 ...

  5. 11300 - Spreading the Wealth

    (解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...

  6. Spreading the Wealth( UVA - 11300)

    题目链接: Spreading the Wealth UVA - 11300 Problem A Communist regime is trying to redistribute wealth i ...

  7. UVA - 11300 Spreading the Wealth 中位数,递推

    UVA - 11300 Spreading the Wealth 题意: 有n个人,每个人都有一些钱,每个人都可以把任意的钱分给左右相邻的两个人(第一个人可以把钱分给第二个人和第 n 个人),求最少需 ...

  8. 题解 UVA - 11300 Spreading the Wealth

    题解 UVA - 11300 Spreading the Wealth 1:题意 A Communist regime is trying to redistribute wealth in a vi ...

  9. UVa 11300 Spreading the Wealth

    注意:给定数轴上的n 个点,在数轴上的所有点中,中位数离所有顶点的距离之和最小.  F. Spreading the Wealth  Problem A Communist regime is try ...

最新文章

  1. SAP MM 外部采购退货的ARM功能实在是鸡肋?
  2. mysql查看是否开启定时器_Mysql 查看定时器 打开定时器 设置定时器时间
  3. 微信支付推出“中秋花灯会”新玩法 点亮花灯享大额提现免费券
  4. Java关键字volatile
  5. 带你学 Redis:Redis简介(一)
  6. 驱动AI产业“第二增长曲线”,清华系RealAI发布首个企业级隐私保护机器学习平台与升级版AI模型杀毒软件
  7. 公交车宜配备逃生绳索
  8. 查询数据库授权以及授权到期的处理方法
  9. Python圆通快递单号查询官方接口-快递鸟
  10. 测试计划工作的目的是什么?
  11. 计算机部分应用显示模糊,电脑应用显示模糊怎么办
  12. 深眸分享——一文看懂倍频器的原理及其应用
  13. Origin 图像复制到Word后字体变形
  14. uniapp 微信小程序实现运动轨迹、行车轨迹、历史轨迹、轨迹回放、不同速度有不同的路线颜色
  15. 锦标赛算法Python实现
  16. promise 读书笔记,promise核心方法(手写promise)
  17. [论文阅读]Contextual Instance Decoupling for Robust Multi-Person Pose Estimation
  18. 滑雪教程-新手必看(上)
  19. 8 亿邮件地址泄露,源于邮件验证服务;腾讯推出微信公众号直播工具
  20. et文件怎么转成excel_excel文件打不开提示文件格式或文件扩展名无效

热门文章

  1. 中国特殊钢行业市场供需与战略研究报告
  2. ARtillery报告:易用性是VR重要指标,非VR用户兴趣持续走低
  3. 国产半导体划片机设备迎发展良机
  4. 计算机传票录入教案,商业银行临柜业务技能电脑传票输入教案.docx
  5. python实现bp神经网络预测,神经网络算法预测彩票
  6. 集成学习案例一:幸福感预测
  7. Vue响应式原理探究之“发布-订阅”模式
  8. Hive的伴奏_OURDEN INSTRUMENTALS MIXTAPE Vol.108 “Sober” 伴奏合辑
  9. Linux下配置IPV6,C程序适配IPV6
  10. mac关闭ipv6选项