这个题同样是二分,不过有个技巧就在于二分的时间在算的时候首先减去这个时间作为自然风干,然后用烘干机的话每分钟就只能掉k-1的水(因为烘干的时候是不会自然风干的,然后需要特殊处理k=1的情况)
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=1e5+100;
int n,k,a[maxn];
bool check(long long val)
{
long long cnt=0;
for(int i=0;i<n;i++)
{
if(a[i]-val<=0)
continue;
if(k==1)
return false;
cnt+=(a[i]-val+k-2)/(k-1);
if(cnt>val)
return false;
}
return true;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
long long l=0,r=0;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
r+=a[i];
}
scanf("%d",&k);
long long ans=0;
while(l<=r)
{
long long mid=(l+r)>>1;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else
l=mid+1;
}
printf("%I64d\n",ans);
}
return 0;
}