描述
沿著學院路,有北醫,北影,北航,北科,北郵,北師,北林,北語等高校,我們都知道,這些學校裡的女生數量是不同的,現在學院路高校共同體做了一個實際不存在的決定,就是要平衡這些高校的女生。所謂平衡,就是讓這些高校裡的女生數量相同。這就涉及到女生的移動。所謂女生的移動,就是將一些學校的女生移到另一個學校。移動女生是需要代價的,將一個女生從一個學校移動到另一個學校需要消耗1個單位的代價,當然,將y個女生從一個學校移動到另一個學校就需要y個代價。現在給出這n所高校裡的女生數量,希望你計算一下,能否實現這個目標,如果能,最小代價是多少。
但是,女生們都是比較多要求的,公主們不喜歡一次就跑很遠的地方。她們每次移動的時候,都只願意移到相鄰的院校。將學院路看成一條橫座標軸,這些高校看成是這條橫座標軸上不同的點,比如,假設只考慮以下三個高校: 北醫(座標0),北航(座標3),北師(座標6)。 這時候,假設我們要把一個北師的美女移動到北醫,
那麼不能直接移動到北醫,只能先將這個美女移動到北航(代價1),然後再從北航移到北醫(代價1),這樣就需要2個代價。
現在按照這些高校的座標從小到大的順序給出這n所高校裡的女生數量,希望你計算一下,能否實現這個目標,如果能,最小代價是多少。
-
輸入
-
多組測試資料,每組測試資料佔兩行,第一行一個整數n (1<=n<=1000),第二行有N個整數: A1,A2,...,Ai,...,An,分別表示這n所高校(已經按座標從小到大排序)裡的女生數量。(Ai>=0,int在int範圍內)
-
輸出
-
如果能夠實現題目所述的目標,輸出最小代價。如果不能,輸出-1,對每組測試資料,輸出佔一行。
結果在int範圍內。
-
範例輸入
-
3
6 8 9
3
9 8 10
-
範例輸出
-
-1
1
類比題
#include <stdio.h>#include <math.h>int main(){int n,i,sum,average;int a[1001];int answer;while(scanf("%d",&n)!=EOF){sum=0;answer=0;for(i=0;i<n;i++){scanf("%d",&a[i]);sum+=a[i];}if(sum%n!=0){printf("-1\n");}else{average=sum/n;for(i=0;i<n;i++)a[i]=a[i]-average;for(i=0;i<n-1;i++){if(a[i]<0){a[i+1]=a[i+1]+a[i];answer+=abs(a[i]);a[i]=0;}if(a[i]>0){a[i+1]=a[i+1]+a[i];answer+=abs(a[i]);a[i]=0;}}printf("%d\n",answer);}}return 0;}