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]糖果传递的主要内容,如果未能解决你的问题,请参考以下文章
[bzoj1045][洛谷P2512][HAOI2008] 糖果传递
P2512 [HAOI2008]糖果传递 & P4016 负载平衡问题