HDU - 6486 Flower
题目大意:有n堆草每次只能对n-1堆操作每次只能减1问最少操作几次能把这些草剪到相同高度如果不能输出-1
我们让n-1个数减1实际上可以看成使得剩下的那一个数加1。
所以问题的答案很明显就是每一个数与最大数的差值。
让我们考虑一下边界。
我们要让所有的数相等,所以每次减的时候由于相当于使得剩下的那个数加1,所以每次减都一定会减到最大的数,所以如果总操作次数>=maxx,最大数不够减,就会失败,输出-1。
样例:
5 8 9 10
5 7 8 9
5 6 7 8
5 5 6 7
5 4 5 6
5 3 4 5
4 3 3 4
3 3 2 3
2 2 2 2
5+2+1=8
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 5e5 + 7;
int n, m, t;
int a[N];
int maxx;
int main(){
cin >> t;
while(t -- ){
scanf("%d", &n);
for(int i = 1; i <= n; ++ i){
scanf("%d", &a[i]), maxx = max(maxx, a[i]);
}
int res = 0;
for(int i = 1; i <= n; ++ i)
res += maxx - a[i];
if(res >= maxx)puts("-1");
else printf("%d\n", res);
}
return 0;
}