題目大意:
有n件衣服,每件衣服含a滴水
有一臺每分鐘可以烘乾k滴水的機器,每次可以讓一件衣服使用
衣服每分鐘蒸發一滴水,輸出烘乾所有的衣服的最少時間
二分枚舉最少時間mid
遍歷衣服,若某件衣服含水量大於mid
算出烘乾所用總時間,公式爲:(a[i]-mid)/(k-1)
再判斷時間與mid的大小
注意k=1的時候特殊處理
#include <stdio.h>
#define MAXN 100010
int a[MAXN];
int main()
{
int i,n,k,max=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>max)
max=a[i];
}
scanf("%d",&k);
int mid,left=1,right=max;
if(k==1)
left=right;
while(left<right)
{
long long sum=0;
mid=(left+right)/2;
for(i=0;i<n;i++)
if(a[i]>mid)
sum+=(a[i]-mid+k-1)/(k-1); //ceil函數會慢很多
if(sum>mid)
left=mid+1;
else
right=mid;
}
printf("%d",left);
return 0;
}