1 条题解
-
0
解析:先以第1号小朋友为起点,算出每个小朋友需要向他后边的小朋友传递的糖果数量。
考虑如果以第i+1号小朋友为起点,则传递数量为其他传递数量与第i号小朋友向后传递数量的差值。
那么选传递数量的中位数,就可以得到最小传递数量。
#include<bits/stdc++.h> using namespace std; int a[1000005];//a[i]表示第i个小朋友原有的糖果数量 long long b[1000005];//b[i]表示从第i个小朋友传给第i+1个小朋友的数量 long long sum=0; int n; long long ans=0; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; sum+=a[i]; } long long ave=sum/n;//平均数 for(int i=1;i<=n;i++){//递推b[i] b[i]=(ave-a[i])+b[i-1]; } sort(b+1,b+n+1); long long mid=b[(n+1)/2];//求中位数 for(int i=1;i<=n;i++){ ans+=abs(mid-b[i]); } cout<<ans; return 0; }
信息
- ID
- 606
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者