bzoj3293 分金币
2024-09-06 00:07:35
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;
}
最新文章
- 【IOS学习】1.IOS框架
- EditText监听键盘输入
- linux命令学习-su
- Sqlserver列出所有数据库名,表名,字段名
- [Java] Serializable(序列化)的理解
- iOS程序启动原理(简单)
- 编辑距离算法详解:Levenshtein Distance算法
- springmvc基础学习3---注解简单理解
- SignalR简单Demo
- 前端持久化--evercookie
- python练习实例1--------给定数字组成三位数
- luogu P4289 [HAOI2008]移动玩具
- Spring-JDBC依赖
- 【ORACLE】重写控制文件
- iOS - 使用苹果自带的UIVideoEditController进行视频编辑
- 移动互联网消息推送原理:长连接+心跳机制(MQTT协议)
- wpf 中Listbox获取选中的值
- struts2中的错误--java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
- Linux大牛分享的7道经典面试题和秒收 offer 的技巧
- 注意for循环中变量的作用域-乾颐堂
热门文章
- Missing associated label more...
- condense 参数
- dpwwn: 1 Vulnhub Walkthrough
- Android项目实战之高仿网易云音乐项目介绍
- 一文解读RESTful (转)
- Java学习关于setContentPane()和getContentPane()的应用
- java中窗口的打开与关闭
- Java题库——Chapter6 一维数组
- Spring Boot 2.2.2.RELEASE 版本中文参考文档【3.2 - 3.10】
- Winform中封装DevExpress的MarqueeProgressBarComtrol实现弹窗式进度条效果