题目大意:Jane洗完了一些衣服,每件衣服有一定的数量,现在她有一台烘干机,烘干机每分钟可以烘干k数量的水,而风干每分钟只能蒸发1数量的水。求如何使用烘干机,使得这些衣服全部变干的时间最短。
思路:二分时间,写个函数判断在这个时间内能不能满足条件。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 111111;
long long n;
long long x[maxn];
long long k,ans;
bool C(long long tot){
long long sum=0;
for(int i=0;i<n;i++){
if(x[i]>tot){
long long t=ceil((x[i]-tot)*1.0/(k-1));
sum+=t;
}
}
if(sum<=tot) return true;
else return false;
}
int main(){
long long mx=0;
while(~scanf("%lld",&n)){
for(int i=0;i<n;i++){
scanf("%lld",&x[i]);
mx=max(mx,x[i]);
}
scanf("%lld",&k);
if(k==1){
printf("%lld\n",mx);
continue;
}
long long left=0,right=mx;
long long mid;
while(left<right){
mid=(left+right)/2;
if(C(mid)){
right=mid;
}
else{
left=mid+1;
}
}
printf("%lld\n",right);
}
return 0;
}