1432:糖果傳遞(均分紙牌的二階)
阿新 • • 發佈:2020-08-10
提交數: 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 }