2095 平衡女生——小強版

來源:互聯網
上載者:User
描述

沿著學院路,有北醫,北影,北航,北科,北郵,北師,北林,北語等高校,我們都知道,這些學校裡的女生數量是不同的,現在學院路高校共同體做了一個實際不存在的決定,就是要平衡這些高校的女生。所謂平衡,就是讓這些高校裡的女生數量相同。這就涉及到女生的移動。所謂女生的移動,就是將一些學校的女生移到另一個學校。移動女生是需要代價的,將一個女生從一個學校移動到另一個學校需要消耗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;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.