采用二分验证的方式,
验证:先假设没有烘***,那么t分钟过后每件衣服就消耗了t个水分。这时候在使用烘***的话就水每分钟消耗n-1个水分,那么每一件衣服还需要使用多少次烘***就可以计算出来。
然后一共可以使用t次烘***,进行比较即可得到。要注意在计算过程中次数可能超出int的范围,需要开long long。
//采用二分验证的方式,
//验证:已知时间,散热器的K,那么就可以算出最大能烘干最大的水分。通过最大水分就可以判断是当前的答案合不合理
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

const int maxn = 1e5+10;
int n, k;
int a[maxn];

bool yanz(int x) 
{
    int b[maxn];
    memcpy(b, a, sizeof(a));
    ll ci = 0;
    for (int i=0;i<n;i++) {
        b[i] -= x;
        if (b[i]>0) {
            ci += ceil((double)b[i]/(k-1));
        }
    }
    return ci<=x;
}

int main()
{
    scanf("%d", &n);
    int maxval = INT_MIN;
    for (int i=0;i<n;i++) {
        scanf("%d", &a[i]);
        if (maxval<a[i]) maxval = a[i];
    }
    scanf("%d", &k);
    if (k<=1) {
        cout<<maxval;
        return 0;
    }
    int l = 1, r = 1e9+10;
    while (l<r) {
//         cout<<l<<" "<<r<<endl;
        int mid = (l+r)/2;
        if (yanz(mid)) r = mid;
        else l = mid+1;
    }
//     cout<<yanz(1)<<endl;
    printf("%d", l);
}