HDU - 6486 Flower(思维)

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

猜你喜欢

转载自blog.csdn.net/weixin_45697774/article/details/108178972