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
原创粉丝点击