设为首页 加入收藏

TOP

POJ3104 Drying [二分]
2015-07-24 05:33:31 来源: 作者: 【 】 浏览:9
Tags:POJ3104 Drying [二分

题目不是很难

大体思路:

题意:烘干机,给出一堆衣服的水分a[i],在不加烘干机情况下自动每一分钟减少1水分,每分钟可以变改衣服(i)到烘干机中,每分钟减少k水分,求最少需要多少时间。
题解:第一时间就想到使用二分枚据答案+验证这种思路,不过这题还是有些陷阱需要注意。
1. 验证答案时,如果 a[i] <= mid,让它自然烘干即可 ; 如果a[i] > mid,那么烘干这件衣服可以分成两段时间:使用烘干机时间x1 + 自然烘干时间x2,那么可以列出等式:mid = x1 + x2; a[i] <= kx1+x2;于是得x1 >= (a[i] -mid)/(k-1);即得使用烘干机的最少时间x1
2.注意当k==1时,k-1 == 0,需要特殊处理,直接打出ans = maxV
3.注意当求left+right时,结果可能超出范围,正确的方法应该是left + (right - left)*0.5;



犯了一个很2的错误,ceil(int/int),应该是ceil(int*1.0/int)

再次验证我的二分写法没错,哇哈哈哈

标准的

while l

l=mid+1;

r=mid;

mid=l+(r-l)/2;

代码如下

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; long long num[111111]; int main() { //cout<<"here"<
       
        mid) sum+=ceil((num[i]-mid)*1.0/(k-1)); } if(sum>mid) l=mid+1; else if(sum<=mid) { r=mid; } mid=(l+r)/2; } printf("%lld\n",mid); } }
       
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 2386 Lake Counting 下一篇递归逆转链表和递归合并有序链表..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: