1. 程式人生 > 實用技巧 >1432:糖果傳遞(均分紙牌的二階)

1432:糖果傳遞(均分紙牌的二階)

提交數: 1183 通過數: 549

【題目描述】

有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞一個糖果代價為1。

【輸入】

第一行一個正整數n≤1000000,表示小朋友的個數.

接下來n行,每行一個整數ai,表示第i個小朋友得到的糖果的顆數

【輸出】

求使所有人獲得均等糖果的最小代價。

【輸入樣例】

4
1
2
5
4

【輸出樣例】

4

【思路分析】

https://www.cnblogs.com/719666a/p/10089161.html

 1 #include <iostream>
 2 #include <cstdio>
 3
#include <algorithm> 4 using namespace std; 5 int main() { 6 int n, k; 7 static int a[1000005], c[1000005]; //陣列在vs中因為區域性資料有預設上限,支援不了這麼大的陣列,所以新增static把它從堆疊資料段挪到全域性資料段 8 long long ave = 0, ans = 0; 9 cin >> n; 10 for (int i = 0; i < n; i++) 11 { 12 cin >> a[i];
13 ave += a[i]; 14 } 15 ave = ave / n; 16 for (int i = 0; i < n; i++) 17 { 18 c[i] = a[i] - ave + c[i - 1]; 19 } 20 sort(c, c + n); 21 k = (n - 1) / 2; 22 for (int i = 0; i <= k; i++) 23 { 24 ans += c[n - i - 1] - c[i]; 25 } 26 cout << ans;
27 return 0; 28 }