uva11300 Spreading the Wealth

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=456&page=show_problem&problem=2275

刘汝佳《算法竞赛入门经典训练指南 1.1例3

 1 ///2014.4.12
 2 ///uva11300
 3 ///刘汝佳《算法竞赛入门经典训练指南 1.1例3
 4 
 5 #include <iostream>
 6 #include <cstdio>
 7 #include <string>
 8 #include <cmath>
 9 #include <algorithm>
10 #include <climits>
11 using namespace std;
12 
13 #define maxn 1000100
14 int n;
15 long long A[maxn];
16 
17 int main()
18 {
19     // freopen("in","r",stdin);
20     // freopen("out","w",stdout);
21     while( scanf("%d",&n)!=EOF ){
22         long long sum = 0;
23         for(int i=0 ; i<n ; i++){
24             scanf("%lld",A+i);
25             sum += A[i];
26         }
27         long long ave = sum / n;
28         for(int i=0 ; i<n ; i++){
29             A[i] -= ave;
30         }
31         for(int i=1 ; i<n ; i++){
32             A[i] += A[i-1];
33         }
34         sort(A,A+n);
35         long long mid = A[n/2];
36         sum = 0;
37         for(int i=0 ; i<n ; i++){
38             if( A[i]-mid > 0 )
39                 sum += A[i]-mid;
40             else
41                 sum += mid-A[i];
42         }
43         cout<<sum<<endl;
44     }
45     return 0;
46 }

 

posted @ 2014-04-12 22:16  basement_boy  阅读(142)  评论(0编辑  收藏  举报