注意一个坑点,一分钟内衣服放在散热器可以减少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); }