注意一个坑点,一分钟内衣服放在散热器可以减少k滴水包含两部分:1.散热器一分钟干的水 2.一分钟内自然干的水。由此可以得出散热器一分钟蒸发k-1点水。

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 100010;
int n;
long long k;
long long arr[maxn];
bool judge(long long num) {//判断num时间内能否全部干完
    long long temp = num;
    for (int i = 0; i < n; i++) {
        if (arr[i] > temp) {
            num-= ceil((arr[i] - temp) / (k - 1.0));
        }
        if (num < 0)return false;
    }
    return true;
}
long long find(long long l, long long r) {// 二分查找
    while(l < r) {
    long long mid = (l + r) / 2;
        if (judge(mid))r = mid;
        else l = mid + 1;
    }
    return l;
}
int main()
{
    scanf("%lld",&n);
    long long r=0;
    for (int i = 0; i < n; i++) {
        scanf("%lld",&arr[i]);
         r = max(r,arr[i]);
    }
    scanf("%lld",&k);
    if(k==1)cout<<r;
    else
    cout<<find(0, r);

}