1 条题解
-
0
#include <bits/stdc++.h> using namespace std; int main(){ int n,sum=0,sum1=0; // n:纸牌堆数,sum:所有纸牌总张数,sum1:最少移动次数 cin >> n; // [1] 输入纸牌堆数n int arr[n]; // 存储每堆纸牌的张数 // [2] 输入每堆纸牌数量,并累加计算总张数 for(int i = 0; i < n; i++){ cin >> arr[i]; sum += arr[i]; } int a = sum / n; // [3] 计算每堆需要达到的平均张数 // [4] 贪心策略:从左到右调整每堆,将多余/不足的纸牌转移到下一堆 for(int i = 0; i < n; i++){ if(a == arr[i]) continue; // 当前堆已符合平均数量,跳过 arr[i+1] += arr[i] - a; // 将当前堆的差额转移到下一堆 sum1++; // 每转移一次,移动次数加1 } cout << sum1; // [5] 输出最少移动次数 return 0; }
- 1
信息
- ID
- 1040
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者