分金币

圆桌旁坐着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

PS:

每一位的可能都是从前一位拿到一部分,然后给下一位一部分

move[i]=move[i-1]+num[i]-ave;

前一位拿到的加上自己的减去应该得到的,就是下一位的

那么现在是从头到尾的分金币,

每一位上都是我要移动的金币,

最短怎么算?

当然是给我要移动的金币排序,取中间值,把金币往中间值移动,

那么就是最短了,

有喜欢数学的可以百度看看大佬的数学推理

package 第六次模拟;

import java.util.Arrays;
import java.util.Scanner; public class Demo6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int num [] = new int [n];
int sum =0;
for (int i = 0; i < n; i++) {
num[i]=sc.nextInt();
sum+=num[i];
}
int ave = sum/n;
int move [] = new int [n];
for (int i = 1; i <n; i++) {
move[i]=move[i-1]+num[i]-ave;
}
Arrays.sort(move);
int result=0;
int mid =move[n/2];
for (int i = 0; i < move.length; i++) {
result+=Math.abs(mid-move[i]);
}
System.out.println(result);
}
}
}

最新文章

  1. Microsoft Office 2010/2013安装组件预设
  2. Emag eht htiw Em Pleh(imitate)
  3. UI进阶 数据处理之文件读写
  4. Webview 中 Javascript 无法调用 Java 对象
  5. JVM内存分配和回收
  6. iOS 百度地图大头针使用
  7. 内核对象kobject和sysfs(2)——kref分析
  8. MVC bootstrap-table显示数据时显示No matching records found
  9. win 2008 R2 或以上版本,只有C盘情况下,PHP上传文件,显示不了解决办法
  10. TCP 套叠字
  11. AngularJS自定义Directive中link和controller的区别
  12. mysql解除死锁状态
  13. HTML5:基本语句
  14. 安装使用git
  15. Use UMDH to identify memory leak problem
  16. JVM Inline
  17. 教程Xcode 下编译发布与提交App到AppStore
  18. WINDBG解决cpu占高的问题
  19. bzoj 4852 炸弹攻击
  20. Java面试不得不知的问题(一)

热门文章

  1. CF-292D Connected Components 并查集 好题
  2. qt creator源码全方面分析(4-6)
  3. Django :Content-Type组件
  4. python--正则表达式中(.)(*)(.*?)以及re.S的认识
  5. JS数组的常用方法
  6. Python+Selenium+Chrome 的一个案例
  7. SpringBoot切面Aop的demo简单讲解
  8. iframe中请求页面而session失效时页面跳转问题
  9. 苏浪浪 201771010120《面向对象程序设计(java)》第六章学习总结
  10. JS获取两个日期间的所有日期