D e s c r i p t i o n Description Description
I n p u t Input Input
O u t p u t Output Output
S a m p l e Sample Sample I n p u t Input Input
3
3
1 3 2
3
2 2 3
5
1 2 3 1 3
S a m p l e Sample Sample O u t p u t Output Output
1
-1
3
H i n t Hint Hint
T r a i n Train Train o f of of T h o u g h t Thought Thought
直接找到平均数,然后一个个加/减
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#define ll long long
using namespace std;
ll n, T, Sum, num, Ans;
ll A[200250];
int main()
{
scanf("%lld", &T);
while(T--)
{
memset(A, 0, sizeof(A));
Sum = num = Ans = 0;
scanf("%lld", &n);
for(int i = 1; i <= n; ++i)
scanf("%lld", &A[i]), Sum += A[i];
int num = Sum / n;
if(Sum != num * n)
{
printf("-1\n");
continue;
}
for(int i = 1; i < n; ++i)
{
if(A[i] < num)
{
A[i + 1] -= num - A[i];
Ans += num - A[i];
A[i] = num;
}
if(A[i] > num)
{
A[i + 1] += A[i] - num;
Ans += A[i] - num;
A[i] = num;
}
}
if(A[n] != num)
{
printf("-1\n");
continue;
}
printf("%lld\n", Ans);
}
return 0;
}