• POj-3104 Drying 二分+贪心


    题目大意:有n件湿的衣服,每件衣服都有相应的湿度,每分钟每件衣服的湿度减1(除了在烘干机里的衣服),现在有一个烘干机,烘干机一分钟可以让一件衣服的湿度降低k,问至少要花多少分钟才能使每件衣服的湿度为0

    解题思路:贪心的话,每分钟都要使用到烘干机。 
    枚举时间,如果湿度小于等于时间的话,就不用考虑了,在枚举时间内肯定会干的 
    如果湿度大于枚举时间的话,就要考虑一下了,该衣服要在给定时间内湿度变为零的话就要满足该式子,设已经过了cnt分钟了,当前这件衣服的湿度为num[i],枚举的时间为mid,那么 (num[i] - cnt) - n * k <= mid - cnt - n 也就是n =(num[i] - cnt) / (k - 1),如果有余数的话,时间还要+1;

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int maxn=100005;
    int maze[maxn];
    int Max,n,k;;
    int cmp(const int a,const int b){
        return a>b;
    }
    bool judge(int mid)
    {
        int Time=0;
        for(int i=0;i<n;i++)
        {
            if(maze[i]<mid)//maze递减,如果maze[i]<mid,则i和i后面的衣服一定可以晾干
                break;
            if(Time>mid)
                return false;
            Time+=(maze[i]-mid)/(k-1);
            if((maze[i]-mid)%(k-1))
                Time++;
        }
        return Time<=mid;
    }
    int solve()
    {
        int l=0,r=Max,mid;
        while(l<r)
        {
            mid=(l+r)/2;
            if(judge(mid))
                r=mid;
            else
                l=mid+1;
        }
        return r;
    }
    int main ()
    {
        while(~scanf("%d",&n))
        {
            for(int i=0;i<n;i++)
                scanf("%d",&maze[i]);
            scanf("%d",&k);
            sort(maze, maze+n, cmp);
            Max=maze[0];
            if(k<=1){
                printf("%d
    ",maze[0]);
                continue;
            }
            else printf("%d
    ",solve());
            
        }
        return 0;
    }


    想的太多,做的太少。
  • 相关阅读:
    Web前端浏览器兼容性问题及解决方案
    JS
    vue element-ui 重置样式问题
    学习的一些文章链接
    打开新世界的第一步:学习servlet
    java学习初体验之课后习题
    下载、安装jdk8(Windows下)并配置变量环境
    下载PhpStorm并进行激活
    WCF+NHibernate 序列化
    wcf 证书+ssl+自定义用户名密码
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115661.html
Copyright © 2020-2023  润新知