参考https://ac.nowcoder.com/acm/problem/16739 均分纸牌

均分纸牌这道题是移动纸牌,就相当于相邻的两堆一堆+1,一堆-1,就是此题了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f(i,a,b) for(int i=a;i<=b;i++)
inline ll r() {
    ll x=0,f=1;
    char c=getchar();
    while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
    while(isdigit(c))x=x*10+c-'0',c=getchar();
    return x*f;
}
#define d r()
ll t;
ll n;
ll a[100010];
int main(){
    t=d;
    while(t--){
        n=d;
        ll sum=0,ans=0;
        f(i,1,n)a[i]=d,sum+=a[i];
        if(sum%n){
            cout<<-1<<endl;
            continue;
        }
        sum/=n;
        f(i,1,n)ans+=abs(sum-a[i]),a[i+1]-=sum-a[i];
        printf("%lld\n",ans);
    }
    return 0;
}