POJ_3104_Drying
来源:互联网 发布:php快速学习 编辑:程序博客网 时间:2024/06/03 21:16
二分查找的问题
题意为
n衣服有a滴水,烘干每分钟为k滴 不烘干为每分钟1滴
问衣服干的最短时间。
注意一个是这个题最后求得是整数分钟,因此过程中要用ceil来向上取整求衣服烘所需要的时间
另外问题要用long long 不然会wa
#include <iostream>#include <stdio.h>#include <math.h>using namespace std;typedef long long LL;const int M=100005;LL s[M];bool isd(LL t,int n,LL k) //t时间衣服都干了吗{ LL co=0; for(int i=0;i<n;i++) { if(s[i]>t) co+=ceil((s[i]-t)*1.0/(k-1)); //额外烘干用的时间 } return co<=t;}LL bs(int n,LL maxs,LL k){ LL lo=0,hi=maxs; LL mid,ans; while(lo<=hi) { mid=(lo+hi)/2; if(isd(mid,n,k)) { ans=mid; //此时mid满足衣服全干,但是mid可能偏大 hi=mid-1; } else lo=mid+1; } return ans; //注意这里的返回}int main(){ int n; LL k,maxs; while(scanf("%d",&n)!=EOF) { maxs=0; for(int i=0;i<n;i++) { scanf("%lld",&s[i]); maxs=max(maxs,s[i]); } scanf("%lld",&k); if(k==1) { printf("%lld\n",maxs); continue; } else printf("%lld\n",bs(n,maxs,k)); } return 0;}
0 0