最让HSQ学长头疼的就是洗衣服了。洗完之后,每件衣服都有一定单位水分,在不使用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分。令人遗憾是HSQ所在的宿舍楼只有1台烘干机,而每台烘干机同时只能烘干1件衣服,请问要想烘干N件衣服最少需要多长时间?

输入

第一行输入N,表示有N件衣服,第二行输入N件衣服的水分ai,第三行表示烘干机每分钟烘干水分K
其中
1 ≤ N ≤ 100 000,1 ≤ ai ≤ 10^9,1 ≤ K≤ 10^9输出

输出烘干N件衣服所需要的最短时间

样例输入 

3
2 3 9
5

3
2 3 6
5

样例输出 

3

2
一、
看一下数据大小就知道肯定不是一个一个衣服的求时间,既然不是从衣服下手,那我们就肯定要从时间上面下手了。。。对时间二分来确定时间是多少的时候才适合
所用时间最短是1分钟,最长时间是把水份最多的衣服晒干所用的时间(不用机器)
那么之后就要对二分的时间进行判定来确定它是否符合。。
1、如果衣服上面的水分小于这个二分的时间,那他就可以不用机器,直接晒干
2、如果水分大于,那就算出来他所需要的时间
这个时候他的水分可以看作是以两种方式损失的
1、自然晒干
2、机器催干(可以说是把机器每分钟晒干的水分看成两部分)
设其x1为自然晒干的时间
x2为机器晒干的时间
则有
1、mid=x1+x2
2、v[i]<=x1+x2*(k-1)
结出来得到:x2>=(v[i]-mid)/(k-1) 即作向上取整既可以
向上取整:
假如:a/s是一个小数
为了向上取整可以写作这样(a+s)/s
那么x2>=(v[i]-mid+k-2)/(k-1)
二、
之后就要说一下二分法在不同题之间的区别
1、如果是要在一个单调序列中找一个确定的值
//https://blog.csdn.net/dijiaxing1234/article/details/81178097
public static int rank(int key,int nums[])
{
    //查找范围的上下界
    int low=0;
    int high=nums.length-1;
    //未查找到的返回值
    int notFind=-1;
    while(low<=high)
    {
        //二分中点=数组左边界+(右边界-左边界)/2
        //整数类型默认取下整
        int mid=low+(high-low)/2;
        //中间值是如果大于key
        if(nums[mid]>key)
        {
            //证明key在[low,mid-1]这个区间
            //因为num[mid]已经判断过了所以下界要减一
            high=mid-1;
        }else if(nums[mid]<key)
        {
            //证明key在[mid+1,high]这个区间
            //同样判断过mid对应的值要从mid+1往后判断
            low=mid+1;
        }
        else
        {
            //查找成功
            return mid;
        }
    }
    //未成功
    return notFind;
}
2、就像这一道题,是从一段范围中求出来那个值符合本题,这个值是未知的,那就用以下这种方法
#include<stdio.h>
#include<string.h>
typedef long long ll;
ll max(ll x,ll y)
{
    return x>y ? x: y;
}
ll v[100005];
int main()
{
    ll a,s,d,f,g;
    scanf("%lld",&a);
    s=0;
    for(int i=1;i<=a;++i)
{
scanf("%lld",&v[i]);
        s=max(s,v[i]);
    }
    scanf("%lld",&d);
    if(d==1) printf("%lld\n",s);
    else
    {
        f=0;
        g=s;
        ll mid;
        while(g-f>1) //要保证他们中间有一个来隔离g和f,否则这两个数就相邻了,或者f在g的右边这个样子【f,g】就不能成立,至于f==g的时候此处值在之前就证明过不可取
        { //因为f=0不会是结果,s分出来讨论过了,所以这两个值都不会是结果,之后讨论他们的一半,如果这个mid不行,才会赋值给f或g
            mid=(f+g)/2;
            ll temp=0;
            for(int i=1;i<=a;++i)
            {
                if(v[i]<=mid) continue;
                ll ans=(v[i]-mid+d-2)/(d-1);
                temp+=ans;
            }
            if(temp>mid) f=mid;
            else  g=mid; 因为本题求的是最短时间,那么如果有一个值满足了,不能直接跳出来,还要接着搜索看看有没有比他更短的时间,所以这里time==mid的时候不能跳出循环
        }
        printf("%lld\n",g);
    }
    return 0;
}
本人菜鸡一枚,如有错误,求指出!

POJ 3104 Drying的更多相关文章

  1. POJ 3104 Drying(二分答案)

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

  2. poj 3104 Drying(二分查找)

    题目链接:http://poj.org/problem?id=3104 Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissio ...

  3. POJ 3104 Drying 二分

    http://poj.org/problem?id=3104 题目大意: 有n件衣服,每件有ai的水,自然风干每分钟少1,而烘干每分钟少k.求所有弄干的最短时间. 思路: 注意烘干时候没有自然风干. ...

  4. POJ 3104 Drying(二分答案)

    [题目链接] http://poj.org/problem?id=3104 [题目大意] 给出n件需要干燥的衣服,烘干机能够每秒干燥k水分, 不在烘干的衣服本身每秒能干燥1水分 求出最少需要干燥的时间 ...

  5. POJ 3104 Drying [二分 有坑点 好题]

    传送门 表示又是神题一道 Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9327   Accepted: 23 ...

  6. poj 3104 Drying(二分搜索之最大化最小值)

    Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smar ...

  7. POJ 3104 Drying(二分

    Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22163   Accepted: 5611 Descripti ...

  8. POJ 3104 Drying (经典)【二分答案】

    <题目链接> 题目大意: 有一些衣服,每件衣服有一定水量,有一个烘干机,每次可以烘一件衣服,每分钟可以烘掉k滴水.每件衣服没分钟可以自动蒸发掉一滴水,用烘干机烘衣服时不蒸发.问最少需要多少 ...

  9. POJ 3104 Drying (二分+精度)

    题目链接:click here~~ [题目大意]: 题意:有一些衣服,每件衣服有一定水量,有一个烘干机,每次能够烘一件衣服,每分钟能够烘掉k单位水. 每件衣服没分钟能够自己主动蒸发掉一单位水, 用烘干 ...

随机推荐

  1. axios拦截器

    import axios from "axios"; axios.interceptors.response.use(response => { //=>设置响应拦截器 ...

  2. 简单的JQuery完美拖拽

    首先导入jq库,最好是1.0版本的.调用函数时,传入要拖拽元素的id值. function drag(sel){ $div = $("#"+sel); $div.mousedown ...

  3. JVM内存区域详解

    本文分为两部分:一是JVM内存区域的讲解:二是常见的内存溢出异常分析. 1.JVM内存区域 java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途, ...

  4. AI佳作解读系列(二)——目标检测AI算法集杂谈:R-CNN,faster R-CNN,yolo,SSD,yoloV2,yoloV3

    1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物 ...

  5. 记一次innobackupex备份恢复数据库过程

    简介:以前备份都是通过mysqldump备份数据库的,由于是逻辑备份,所以采用这种备份方式数据是很安全的,跨平台.版本都很容易.凡事有利必有弊,逻辑备份在你数据库比较大时,备份.恢复数据所耗费的时间也 ...

  6. 洛谷 p1090 合并果子

    https://www.luogu.org/problemnew/show/P1090 优先队列的经典题目 体现了stl的优越性 #include<bits/stdc++.h> using ...

  7. 21.Pod的limit和request和资源监控收集服务Heapster

    容器的资源需求,资源限制 requests:需求,最低保障: limits:限制,硬限制: CPU: 1颗逻辑CPU =,millicores 500m=.5CPU 内存: E.P.T.G.M.K E ...

  8. bis和bic命令实现或和异或运算

    从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...

  9. aop通知加参数的匹配规则

  10. SD第九届省赛B题 Bullet

    Bullet Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Description In G ...