• POJ 3104 Drying(二分答案)


    【题目链接】 http://poj.org/problem?id=3104

    【题目大意】

      给出n件需要干燥的衣服,烘干机能够每秒干燥k水分,
      不在烘干的衣服本身每秒能干燥1水分
      求出最少需要干燥的时间。

    【题解

      考虑将烘干机的烘干效应变为k-1,那么就是每件衣服在每秒都会自动减少一水分
      如果我们知道最少需要的时间,那么每件衣服自己减少的水分数量就知道了,
      在除去自然减少的水分之后,看看还需要多少k-1的水分减少才能烘干全部的衣服就可以了,
      因此我们二分这个答案,验证是否可行即可。

    【代码】

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int N=100010;
    int n,k,a[N];
    bool check(int x){
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(a[i]-x<=0)continue;
            cnt+=(a[i]-x+k-2)/(k-1);
            //printf("%d
    ",cnt);
            if(cnt>x)return 0;
        }return 1;
    }
    int main(){
        while(~scanf("%d",&n)){
            int l=1,r=0,ans;
            for(int i=1;i<=n;i++)scanf("%d",&a[i]),r=max(r,a[i]);
            scanf("%d",&k);
            if(k==1){printf("%d
    ",r);continue;} 
            while(l<=r){
                int mid=(l+r)>>1;
                //printf("%d %d %d
    ",l,r,mid);
                if(check(mid))ans=mid,r=mid-1;
                else l=mid+1;
            }printf("%d
    ",ans);
        }return 0;
    }
  • 相关阅读:
    java调优参数记录
    Java性能调优实践
    Java常用Json库性能对比
    微服务架构
    css美化页面
    HTML5⑥
    初始css
    HTML⑤
    反射机制
    简单工厂设计模式
  • 原文地址:https://www.cnblogs.com/forever97/p/poj3104.html
Copyright © 2020-2023  润新知