UVA11300 Spreading the Wealth

來源:互聯網
上載者:User

標籤:

Problem

A Communist regime is trying to redistribute wealth in a village. They have have decided to sit everyone around a circular table. First, everyone has converted all of their properties to coins of equal value, such that the total number of coins is divisible by the number of people in the village. Finally, each person gives a number of coins to the person on his right and a number coins to the person on his left, such that in the end, everyone has the same number of coins. Given the number of coins of each person, compute the minimum number of coins that must be transferred using this method so that everyone has the same number of coins.

The Input

There is a number of inputs. Each input begins with n(n<1000001), the number of people in the village. n lines follow, giving the number of coins of each person in the village, in counterclockwise order around the table. The total number of coins will fit inside an unsigned 64 bit integer.

The Output

For each input, output the minimum number of coins that must be transferred on a single line.

Sample Input

 

310010010041254

 

Sample Output

 

04

 

Problem setter: Josh Bao 

/*   分錢只能左右分,問最少使用的硬幣的個數   A[i]:當前擁有的錢的數目   xi:表示i分給i+1錢的數目,正表示分出,負表示收入   M:分完之後的狀態(正分出,負收入)   x1   M = A[1] + x1 - x2   --- x2 = A[1] - M + x1 = B[1] + x1    M = A[2] + x2 - x3   --- x3 = A[2] - M + x2 = B[2] + x2 = B[1] + B[2] + x1   ....   ....   xn = sum(B[1] + ... + B[n-1]) + x1      answer = min(abs(xi - x1) + ... + abs(xi - xn)) (1 ... n)   中位元 */#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int main(){    int n;    int a[1100000];    int c[1100000];    while(~scanf("%d ", &n)){        long long  sum = 0;        for(int i = 1; i <= n ; i++){            scanf("%d", &a[i]);            sum += a[i];        }        int temp = sum / n;        c[0] = 0;        for(int i = 1; i < n ; i++)            c[i] = c[i-1] + a[i] - temp;        sort(c , c + n);        int x = c[n/2];        sum = 0;        for(int i = 0; i < n ; i++){            sum += fabs(c[i] - x);        }        printf("%lld\n", sum);    }    return 0;}

  

UVA11300 Spreading the Wealth

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.