POJ-3104 Drying(二分
题目链接:http://poj.org/problem?id=3104
题意:你有n件衣服需要烘干,每件衣服给出湿度。你现在有一个烘干机,每次可以烘干k点湿度,求输出烘干所有衣服所需最少的时间。
思路:二分最少时间,如果当前衣服大于时间,我们考虑使用烘干机,求出所有衣服烘干所需时间,如果<=mid 我们保存mid,继续往更少的时间二分即可
#include<iostream> #include<cstdio> #include<cmath> #define ll long long using namespace std; const int maxn = 100005; ll a[maxn]; int main() { int n; while(~scanf("%d",&n)) { ll Max=0; for(int i=1; i<=n; i++) { scanf("%lld",&a[i]); Max=a[i]>Max?a[i]:Max; } ll k; scanf("%lld",&k); if(k==1) { printf("%d\n",Max); continue; } ll l=1; ll r=Max; ll ans=0; while(l<=r) { ll mid=(l+r)>>1; ll sum=0; for(int i=1; i<=n; i++) { if(a[i]>mid) { ll xx=ceil((a[i]-mid)*1.0/(k-1)); sum+=xx; } } if(sum<=mid) { ans=mid; r=mid-1; } else l=mid+1; } cout<<ans<<endl; } }
PS:摸鱼怪的博客分享,欢迎感谢各路大牛的指点~