//题意:给你n个数,每次让n-1个数减一,问:最少多少次可以让这几个数相等,不可以的话输出-1
//思路:逆向思维,n-1个数-1可以等价于另一个数加一,这样的话可以算出最小操作次数.然后还是按照减法来说
//每次的话一定会让最大的数减一,我们直接判断最大的数是否大于操作次数就可以了(a[i]>0)操作次数小于最大值
//输出操作数,否则输出-1;
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<sstream>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
ll a[110000];
int main()
{
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--)
{
ll n,maxx=0,s=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
maxx=max(maxx,a[i]);
}
for(int i=0;i<n;i++)
{
s+=maxx-a[i];
}
if(s<maxx)printf("%lld\n",s);
else printf("-1\n");
}
}
//小学弟温馨提示:这道题可以锻炼一下大家的逆向思维哦
//以上为小学弟(小菜鸡)的一点浅显理解如果有什么困惑或者学长(大佬)有什么建议欢迎在评论区留言
11万+

被折叠的 条评论
为什么被折叠?



