本文主要是介绍【牛客_2020.10.27】交换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
交换
桝䢰䂖轤(解题思路)
相邻的位置一个 + 1 +1 +1 一个 − 1 -1 −1 ,那么总和还是不变的。使所有的值最后相等,自然只能是平均值。如果平均值不是整数,那仅凭 + 1 +1 +1 − 1 -1 −1 得出小数那就是蟠桃园结果了。然后将当前值传递给下一个,累计即可。
code
#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;ll T;
ll n,a[100010];
ll ans;ll pj()
{ll s=0;for(ll i=1;i<=n;i++)s+=a[i];if(s%n==0)return s/n;return -1;
}int main()
{cin>>T;while(T--){cin>>n;for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);ll pjz=pj();if(pjz==-1){cout<<-1<<endl;continue; }ans=0;for(ll i=1;i<n;i++)a[i+1]+=a[i]-pjz,ans+=abs(a[i]-pjz);cout<<ans<<endl;}
}
这篇关于【牛客_2020.10.27】交换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!