11300 - Spreading the Wealth

网友投稿 251 2022-11-05


11300 - Spreading the Wealth

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

分金币(Spreading the Wealth, UVa 11300)

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

【输入格式】

输入包含多组数据。每组数据第一行为整数n(n≤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#includeusing 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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA 单元测试覆盖技巧分享
下一篇:iPhone App 上架流程
相关文章

 发表评论

暂时没有评论,来抢沙发吧~