参考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;
}


京公网安备 11010502036488号