P2512 [HAOI2008]糖果傳遞
阿新 • • 發佈:2018-04-17
etc ++ reg HA -s -html style har 比較
題目描述
有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]糖果傳遞