每件衣服都有一定单位水分,在不使用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分,但是遗憾是只有1台烘干机,每台烘干机同时只能烘干1件衣服,请问要想烘干N件衣服最少需要多长时间?
输入
多组输入
第一行输入N,表示有N件衣服,第二行输入N件衣服的水分ai,第三行表示烘干机每分钟烘干水分K
其中
1 ≤ N ≤ 100 000,1 ≤ ai ≤ 10^9,1 ≤ K≤ 10^9输出
输出
烘干N件衣服所需要的最短时间
要注意的是,当你拿起一件衣服用吹风机风干的时候,这个过程也算一分钟,能自然风干1.还有k真正能风干的速率是k-1
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int MAXN=100050;
const int INF=0x3f3f3f3f;
int n;
long long a[MAXN];
long long k;
long long l,r,mid;
int slove(){
mid=(l+r)/2;
long long cnt=0;
for(int i=0;i<n;i++){
if(a[i]<=mid)
continue;
else{
cnt+=(a[i]-mid-1)/(k-1)+1;
}
if(cnt>mid){
return 0;
}
}
return 1;
}
int main(){
while(scanf("%d",&n)!=EOF){
l=0;
r=0;
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
r=max(r,a[i]);//就算是全自然风干,最长的时间就是水分最多的那件衣服要花的时间
}
scanf("%d",&k);
if(k==1)//k为1的话
cout<<r<<endl;
else{
long long ans=INF;
while(l<=r){
if(!slove())
l=mid+1;
else{
ans=min(ans,mid);
r=mid-1;
}
}
printf("%lld\n",ans);
}
}
return 0;
}