您的位置:首页 > 其它

BZOJ 1045 [HAOI2008] 糖果传递 ……

2017-09-17 20:18 309 查看

Description

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

Input

  第一行一个正整数n<=987654321,表示小朋友的个数.接下来n行,每行一个整数ai,表示第i个小朋友得到的

糖果的颗数.

Output

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

Sample Input

4

1

2

5

4

Sample Output

4

HINT

传送门
题目范围其实是n<=1000000……ai<=1e9……
竟然没想出来……还是挺厉害的……
orz hzwer
对了注意一下long long

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int
N=1000005;
int n;
ll a
,S
;
int main(){
cin>>n;ll ave=0LL;
for (int i=1;i<=n;i++)
scanf("%lld",&a[i]),ave+=a[i];
ave/=(ll)n,S[0]=0LL;
for (int i=1;i<=n;i++) S[i]=S[i-1]+a[i]-ave;
sort(S+1,S+1+n);
ll ans=0LL,t=S[n>>1];
for (int i=1;i<=n;i++) ans+=abs(S[i]-t);
cout<<ans<<endl;
return 0;
}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: