1 solutions

  • 0
    @ 2025-3-9 21:15:03
    #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