1. 程式人生 > >P2512 [HAOI2008]糖果傳遞

P2512 [HAOI2008]糖果傳遞

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]糖果傳遞