设为首页 加入收藏

TOP

POJ Drying
2015-07-20 17:42:46 来源: 作者: 【 】 浏览:3
Tags:POJ Drying

Drying


题目链接:Click Here~

题目分析:

给出N件带水的衣服,你有两种选择可以把某件衣服给弄干。一是用烘干机可以每分钟烤干衣服的K滴水。二是每分钟衣服会自然烘干一滴水。而用烘干机的时候就不再自然烘干了。而每件衣服所带的水滴是不一样多的。现在问你最少要多少时间可以把衣服全烘干。


思路分析:

先二分枚举时间。但是判断的条件有点难想到,一开始用暴力判断结果超时了。后来看了博客后才知道只要转换一下公式就可以了判断了。详细解释过程请看代码。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         using namespace std; const int MAXN = 100000 + 10; const int INF = ~0U >> 2; int a[MAXN],sum[MAXN]; int N,K; /* 假设烘干时间是x,则自然风干时间为mid - x K*x + (mid - x) >= a[i] x >= (a[i] - mid)/(K - 1) (K != 1) */ bool C(int mid){ unsigned long long sum(0); for(int i = 0;i < N;++i){ int more = a[i] - mid; if(more > 0){ sum += ceil(more + K - 1 / K); //ceil } } return sum <= mid; } //二分时间 void solve(){ int lb = -1,ub = INF; while(ub - lb > 1){ int mid = (lb + ub) / 2; if(C(mid)) ub = mid; else lb = mid; } printf("%d\n",ub); } int main() { while(~scanf("%d",&N)){ for(int i = 0;i < N;++i) scanf("%d",&a[i]); scanf("%d",&K); if(K == 1){ //特判,防止分母为0 printf("%d\n",*max_element(a,a+N)); continue; } K--; solve(); } return 0; } 
       
      
     
    
   
  

??

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1811-Rank of Tetris(拓扑排.. 下一篇UVA11609 - Teams(组合数学+快速..

评论

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

·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)
·labview中tcp/ip通信 (2025-12-25 05:19:13)
·新书介绍《Python数 (2025-12-25 04:49:47)
·怎么利用 Python 进 (2025-12-25 04:49:45)