题目来源:码蹄集
https://matiji.net/exam/brushquestion/4/3181/1DC60EA6DF83A333301CFFE1407FBA59
时间限制:1000ms
内存限制:65535kb
题目描述:W有n个手下,位置从1到n,他们坐成一排,每个人有ai个糖果,每个人只能把糖果送给左右两个人,由于坐在1 和n 位置上的是术士,他们可以通过技艺,相互传递糖果,每人每次传递一个糖果代价为1。
输入格式:第一行一个正整数n ≤ 1e3,表示手下的个数.
接下来n行,每行一个整数ai,表示第i个手下得到的糖果的颗数.
输出格式:求使所有人获得均等糖果的最少代价。
输入样例:
4
9
8
17
6
输出样例:8
备注:
1 <=n <= 1e3
0 <= ai <= 1e5
参考程序:
#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;
#define ll long long
const int N = 1000010;
int n;
ll a[N];
int main() {
cin >> n;
ll ave = 0;
for (int i = 1; i <= n; i++) {
cin >> a[i];
a[i + n] = a[i] ;
ave += a[i];
}
ave = ave / n;
ll an = 1e9;
for (int i = 1; i <= n; i++){
ll now = 0, ans = 0;
for (int j = i; j <= n + i - 1; j++){
ll t = now + a[j] ;
ans += abs(t - ave);
now = t - ave;
}
an = min (an, ans) ;
//cout << ans <<" " ;
}
cout << an ;
return 0;
}