1 solutions
-
0
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e7+11, INF = 0x3f3f3f3f; ll n, avg, ans, sum, a[N], s[N]; int main(){ cin>>n; for(int i=0;i<n;i++) scanf("%lld",&a[i]), sum += a[i]; avg = sum / n; // 求出平均值 // 手中的数量减去avg,这个数组的前缀和记录的就是 // 使得此点手中的数量为平均值,所需要的操作次数 for(int i=0;i<n;i++) a[i] -= avg, s[i+1] = s[i] + a[i]; // 对于环形均分问题,我们可以找一个断点,这个断点在平均值的时候是最好的 int x = (n + 1) >> 1; sort(s + 1, s + 1 + n); for(int i=1;i<=n;i++) ans += abs(s[i] - s[x]); printf("%lld\n",ans); return 0; }
- 1
Information
- ID
- 529
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 1
- Accepted
- 1
- Uploaded By