P2512 [HAOI2008]糖果传递

Posted five20

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2512 [HAOI2008]糖果传递相关的知识,希望对你有一定的参考价值。

题目描述

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

输入输出格式

输入格式:

小朋友个数n 下面n行 ai

输出格式:

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

输入输出样例

输入样例#1: 
4
1
2
5
4
输出样例#1: 
4

说明

对于100%的数据 n≤106

 

Solution:

  本题和上篇博客一样,又是一道环形均分纸牌问题,只不过本题数据比较大,注意开$long\;long$和读入优化,基本就$OK$了。

代码:

 

 1 #include<bits/stdc++.h>
 2 #define il inline
 3 #define ll long long
 4 using namespace std;
 5 const int N=1e6+5;
 6 ll n,a[N],sum,s[N];
 7 il ll gi(){
 8     ll a=0;char x=getchar();bool f=0;
 9     while((x<0||x>9)&&x!=-)x=getchar();
10     if(x==-)x=getchar(),f=1;
11     while(x>=0&&x<=9)a=a*10+x-48,x=getchar();
12     return f?-a:a;
13 }
14 int main()
15 {
16     n=gi();
17     for(int i=1;i<=n;i++)a[i]=gi(),sum+=a[i];
18     sum/=n;
19     for(int i=1;i<=n;i++)a[i]-=sum,s[i]=s[i-1]+a[i];
20     sort(s+1,s+n+1);
21     sum=0;
22     for(int i=1;i<=n;i++)sum+=abs(s[n/2+1]-s[i]);
23     cout<<sum;
24     return 0;
25 }

 

 

 

以上是关于P2512 [HAOI2008]糖果传递的主要内容,如果未能解决你的问题,请参考以下文章

P2512 [HAOI2008]糖果传递 题解 数学

P2512 [HAOI2008]糖果传递

[bzoj1045][洛谷P2512][HAOI2008] 糖果传递

P2512 [HAOI2008]糖果传递 & P4016 负载平衡问题

P2512 [HAOI2008]糖果传递&&P3156 [CQOI2011]分金币&&P4016 负载平衡问题

[HAOI2008] 糖果传递