Description###

有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。

Input###

第一行一个正整数nn<=1'000'000,表示小朋友的个数.

接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.

Output###

求使所有人获得均等糖果的最小代价。

Sample Input###

4

1

2

5

4

Sample Output###

4


想法##

设第\(i\)个小朋友从他左边小朋友那里得到 \(l_i\) 个糖果,向他右边的小朋友传递 \(r_i\) 个糖果

(\(l_i\) 与 \(r_i\) 都可以为负数)

显然 \(l_i=r_{i-1}\) ,特殊地 \(l_1=r_n\)

设\(p\)为最终每个小朋友手中的糖果数

则有 \(l_i+a_i-r_i=p\) , 即 $ r_i=l_i+(a_i-p) $

而我们又有 \(l_i=r_{i-1}\)

一直递归下去有 $ r_i=l_1+(a_1-p)+(a_2-p)+(a_3-p)+…+(a_i-p) $

最终答案为 \(|r_1|+|r_2|+…+|r_n|\)

我们可以记下 \(a_i-p\) 的前缀和为 \(sum_i\)

那么 \(ans=|l_1+sum_1|+|l_1+sum_2|+…+|l_1+sum_n|\)

绝对值是个美妙的东西,\(|l_1+sum_i|\) 可想为数轴上 \(-l_i\) 与 \(sum_i\) 的距离

那么\(ans\)的最小值在 \(-l_1\) 取 \(sum_i\) 中位数时取到

求出\(sum_i\)及其中位数后计算即可。


代码##

#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; typedef long long ll;
const int N = 1000005; int a[N];
ll sum[N],p;
int n; int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
p+=a[i];
}
p=p/n;
sum[0]=0;
for(int i=1;i<=n;i++)
sum[i]=sum[i-1]+a[i]-p; sort(sum+1,sum+1+n);
ll l=sum[n/2+1],ans=0; //注意:中位数为n/2+1而不是n/2
for(int i=1;i<=n;i++)
ans+=abs(sum[i]-l);
printf("%lld\n",ans); return 0;
}

最新文章

  1. IOS系列swift语言之课时六
  2. 0021 Java学习笔记-面向对象-包、构造器
  3. seajs加载jquery时提示$ is not a function该怎么解决
  4. OpenGL 圆角矩形
  5. shell脚本调试技术_转
  6. MyBatis学习笔记(三) 关联关系
  7. visual studio 2015离线版msdn下载和安装
  8. $(window).height() 文档高度问题
  9. sublime3下载安装及常用插件
  10. 雄冠条码PV系统-2016-05-17-收获
  11. [0] (VDP)垂直开发模式
  12. Maven 结合 IDEA 入门实践
  13. input输入框限制输入正整数、小数、字母、文字
  14. kettle变量(var变量)
  15. MySQL和Oracle的区别
  16. Luogu P1439 【模板】最长公共子序列
  17. nginx+tpmcat+redis实现session共享
  18. [转]JSTL 自定义方法报错Invalid syntax for function signature in TLD.
  19. Mysql 查看表结构的命令
  20. golang slice使用不慎导致的问题

热门文章

  1. linux 安装一个共享的处理者
  2. 性能测试基础-SOCKET协议用例
  3. 【t044】弗洛伊德
  4. 特殊字符,如Emoji表情Base64存储到数据库
  5. .Net Core解除文件上传大小限制
  6. com.netflix.discovery.DiscoveryClient : Completed shut down of DiscoveryClient
  7. 第二阶段:4.商业需求文档MRD:1.PRD-产品功能列表
  8. 互联网项目中mysql应该选什么事务隔离级别
  9. mysql主从之keepalive+MySQL高可用
  10. phpqrcode生成任意尺寸的二维码