题意:
蒸衣服,单位时间掉K单位的水。不蒸单位时间掉1单位的水。给定n件衣服的水量和K,求K的最小值。
题解:
最小化可行解。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;int a[100000+5];int n,k;bool C(int x)
{long long sum=0;for(int i=0; i<n; i++)if(a[i]>x){sum+=ceil(double(a[i]-x)/(k-1));//需要蒸的时间if(sum>x)return false;}return sum<=x;//x为可行解。即 x 时间所有衣服都干了!
}int main()
{while(cin>>n){int INF=0;for(int i=0; i<n; i++){scanf("%d",&a[i]);if(a[i]>INF)INF=a[i];}cin>>k;if(k==1){cout<<INF<<endl;return 0;}//蒸和不蒸效率一样int lb=0;int ub=INF+10;while(ub-lb>1){int mid=(ub+lb)/2;if(C(mid))ub=mid;//最小化可行解else lb=mid;}cout<<ub<<endl;}
}