题目链接

problem

圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除。每个人可以给他左右相邻的人一些金币,最终使

得每个人的金币数目相等。你的任务是求出被转手的金币数量的最小值。

solution

肯定会有至少一个相邻位置之间没有进行传递。

枚举这个位置,假设为k。用x表示每个人最终应有的硬币数量,\(S_i\)表示前i个人所有的硬币数量和-前i个人应有的硬币数之和。那么在第i个人与第\(i-1\)个人之间进行传递的硬币数量就是\(|S_i-S_k|\)。枚举\(S_k\),统计答案即可。

code

/*
* @Author: wxyww
* @Date: 2019-12-14 19:29:29
* @Last Modified time: 2019-12-14 20:23:07
*/
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<ctime>
using namespace std;
typedef long long ll;
const int N = 2000010;
ll read() {
ll x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1; c = getchar();
}
while(c >= '0' && c <= '9') {
x = x * 10 + c - '0'; c = getchar();
}
return x * f;
}
ll s[N],a[N];
int main() {
int n = read();
ll sum = 0;
for(int i = 1;i <= n;++i) a[i] = read(),sum += a[i]; ll x = sum / n;
for(int i = 1;i <= n;++i) a[i] = a[i - 1] + a[i] - x; sort(a + 1,a + n + 1); for(int i = n;i >= 1;--i) s[i] = s[i + 1] + a[i];
ll now = 0;
ll ans = 1e16;
for(int i = 1;i <= n;++i) {
now += a[i];
ans = min(ans,a[i] * i - now + s[i + 1] - a[i] * (n - i));
}
cout<<ans;
return 0;
}

最新文章

  1. 【IOS学习】1.IOS框架
  2. EditText监听键盘输入
  3. linux命令学习-su
  4. Sqlserver列出所有数据库名,表名,字段名
  5. [Java] Serializable(序列化)的理解
  6. iOS程序启动原理(简单)
  7. 编辑距离算法详解:Levenshtein Distance算法
  8. springmvc基础学习3---注解简单理解
  9. SignalR简单Demo
  10. 前端持久化--evercookie
  11. python练习实例1--------给定数字组成三位数
  12. luogu P4289 [HAOI2008]移动玩具
  13. Spring-JDBC依赖
  14. 【ORACLE】重写控制文件
  15. iOS - 使用苹果自带的UIVideoEditController进行视频编辑
  16. 移动互联网消息推送原理:长连接+心跳机制(MQTT协议)
  17. wpf 中Listbox获取选中的值
  18. struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
  19. Linux大牛分享的7道经典面试题和秒收 offer 的技巧
  20. 注意for循环中变量的作用域-乾颐堂

热门文章

  1. Missing associated label more...
  2. condense 参数
  3. dpwwn: 1 Vulnhub Walkthrough
  4. Android项目实战之高仿网易云音乐项目介绍
  5. 一文解读RESTful (转)
  6. Java学习关于setContentPane()和getContentPane()的应用
  7. java中窗口的打开与关闭
  8. Java题库——Chapter6 一维数组
  9. Spring Boot 2.2.2.RELEASE 版本中文参考文档【3.2 - 3.10】
  10. Winform中封装DevExpress的MarqueeProgressBarComtrol实现弹窗式进度条效果