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 }

浙公网安备 33010602011771号