原题传送门
分析:环形均分纸牌,将环断成链就好了
没写过均分纸牌的可以去写一下 纸牌
一般情况:将1,n断开
ans=s1+s2+…+sn
从k,k+1断开
s1+sn-sk
s2+sn-sk
…
sk+sn-sk
s(k+1)-sk
…
sn-sk
易证得sn=0
所以 ans=abs(s1-sk)+abs(s2-sk)+…+abs(sn-sk)
要让ans最小
则k为s1~sn的中位数
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000005;
ll a[N],s[N];
int main()
{
ios_base::sync_with_stdio(false);
int n;
cin>>n;
ll ave=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
ave+=a[i];
}
ave/=n;
for(int i=1;i<=n;i++) a[i]=ave-a[i];
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
sort(s+1,s+1+n);
ll ans=0;
for(int i=1;i<=n;i++) ans+=abs(s[i]-s[(n+1)/2]);
cout<<ans;
return 0;
}