0
点赞
收藏
分享

微信扫一扫

122. 糖果传递

忍禁 2022-04-05 阅读 121
c++

做这道题目之前,先阅读以下博客,了解详情:

AcWing 122. 糖果传递 - AcWing

有 n 个小朋友坐成一圈,每人有 a[i] 个糖果。

每人只能给左右两人传递糖果。

每人每次传递一个糖果代价为 1。

求使所有人获得均等糖果的最小代价。

输入格式

第一行输入一个正整数 n,表示小朋友的个数。

接下来 n 行,每行一个整数 a[i],表示第 i 个小朋友初始得到的糖果的颗数。

输出格式

输出一个整数,表示最小代价。

数据范围

1≤n≤1000000,
0≤a[i]≤2×10^9,
数据保证一定有解。

输入样例:

4
1
2
5
4

输出样例:

4

只能说这种思路很好。

#include<iostream>
#include<algorithm>
#include<math.h>
using namespace std;
int main()
{
	int sum;
	cin>>sum;
	int bns[sum],ans[sum];
	long long math=0;
	for(int n=0;n<sum;n++)
	{
		cin>>bns[n];
		math+=bns[n];
	}
	math/=sum;
	ans[0]=0;
	for(int n=1;n<sum;n++)
	ans[n]=ans[n-1]+bns[n]-math;
	sort(ans,ans+sum);
	int mid=(sum-1)/2;
	math=0;
	for(int m=0;m<sum;m++)
	{
		math+=fabs(ans[mid]-ans[m]);
	}
	cout<<math<<endl;
	return 0;
}
举报

相关推荐

0 条评论