(解方程建模+中位数求最短累积位移)

分金币(Spreading the Wealth, UVa 11300)

圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除。每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等。你的任务是求出被转手的金币数量的最小值。比如,n=4,且4个人的金币数量分别为1,2,5,4时,只需转移4枚金币(第3个人给第2个人两枚金币,第2个人和第4个人分别给第1个人1枚金币)即可实现每人手中的金币数目相等。

【输入格式】

输入包含多组数据。每组数据第一行为整数nn≤1 000 000),以下n行每行为一个整数,按逆时针顺序给出每个人拥有的金币数。输入结束标志为文件结束符(EOF)。

【输出格式】

对于每组数据,输出被转手金币数量的最小值。输入保证这个值在64位无符号整数范围内。

【样例输入】

3

100

100

100

4

1

2

5

4

【样例输出】

0

4

【思路】:
C0 = 0
C1 = A1 - M = C0 + A1 - M
C2 = A1 - M + A2 - M = C1 + A2 - M
............
Cn = An-1 - M + An - M = Cn-1 + An - M
规律:Cn  = Cn-1 + An - M
#include<cstdio>
#include<algorithm>
using namespace std;
int Money[1000001],C[1000001];
int cmp(const void* a,const void *b)
{return *(int*)a-*(int*)b;
}
int abs(int a,int b){if(a<b) return b-a;else return a-b;
}
int main()
{long long i,N,sum,min,M;while(scanf("%lld",&N)!=EOF){sum=0;min=0;for(i=0;i<N;i++){scanf("%d",Money+i);sum+=Money[i];}M=sum/N;for(int i=1;i<N;i++){C[i]=C[i-1]+Money[i]-M;}qsort(C,N,sizeof(int),cmp);long long int x1=C[N/2];for(i=0;i<N;i++){min+=abs(x1,C[i]);}printf("%lld\n",min);}return 0;
}

11300 - Spreading the Wealth相关推荐

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

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

  2. 题解 UVA - 11300 Spreading the Wealth

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

  3. UVa 11300 Spreading the Wealth

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

  4. Spreading the Wealth( UVA - 11300)

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

  5. UVA11300 Spreading the Wealth

    UVA11300 Spreading the Wealth 思路  对于这道题,我们可以将其转化为一道线性代数的问题,设第iii个人的初始值为AiA_{i}Ai​,第iii个人给第i−1i-1i−1个 ...

  6. 分金币(Spreading the Wealth,UVa 11300)

    分金币 题目描述 给定N个人成环状坐,每个人初始分配Ai的金币,金币总数可以被N整除,每个人可以给左右相邻的人一定数量的金币使得最终每个人的金币数量相同,求转移数量最小的方案所转移的总金币数量. N& ...

  7. Spreading the Wealth UVA - 11300

    问题 分析 这一题就按照白书上的习题讲解来做就行了,写下来是为了提醒自己可以靠列方程,然后化简方程将一个问题变得很简单,真的很巧妙 #include <iostream> #include ...

  8. Spreading the Wealth(UVa 11300)

    来自<算法竞赛入门经典训练指南> 1.题目原文 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...

  9. Spreading the Wealth UVA - 11300 (分金币)(分析求中位数)

    题目意思 圆桌旁坐着n个人,每个人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等,你的任务是求出被转手的金币数量的最小值. 这道题乍看没有什么思 ...

最新文章

  1. 基础知识——变量和简单数据类型(一)
  2. HDU 5306 Gorgeous Sequence
  3. oracle单行超2499,SP2-0027: Input is too long ( 2499 characters) - line ignored — oracle-tech
  4. php中绘画控制包括什么,PhpStorm中绘画UML
  5. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
  6. 二十五、Kaggle | 全球听众最多的50首歌曲
  7. Phaserjs V2的state状态解析及技巧
  8. 【转】setsocketopt getsocketopt比较全的参数说明
  9. mysql 5.6 64位解压版_MySQL 5.6 for Windows 解压缩版配置安装(win 10 64位亲测)附安装包下载链接...
  10. mysql 维护文档_mysql数据库维护文档
  11. python键_Python键盘按键模拟
  12. C语言实现加密解密功能 附带详细注释源码
  13. php preg replace中文,php preg_replace函数用法
  14. 成长中不可或缺的是信仰(转载)
  15. 一键清除苹果锁屏密码_Aiseesoft iPhone Unlocker下载-苹果设备解锁工具 v1.0.22 官方版...
  16. 管理者要会讲的六十八个故事
  17. mysql 员工登记表_员工部门信息表-myemployees
  18. Spring Aop详解(无参和带参)
  19. itest(爱测试) 4.3.1 发布,开源BUG 跟踪管理 amp; 敏捷测试管理软件
  20. 贪吃蛇源码(C语言版)-学习版

热门文章

  1. 神经网络的前向传播推导(图、公式)
  2. RemoteView的使用
  3. 【2022年clion2022.2控制台中文乱码完美解决】
  4. 培养 逻辑思维和抽象能力
  5. 如何向 YouTube 视频添加章节
  6. CTF笔记 SSTI模板注入
  7. 图像处理 | 最常用的边缘检测详解与代码(Robert, Sober, Prewitt, Canny, Kirsch, Laplacian, LOG, DOG算子)
  8. linux 常用软件2
  9. 计算机加入域 不能访问网络位置 解决办法
  10. 利用HTML制作时间,如何使用HTML,CSS和JavaScript制作时间表?