POJ 3104 Drying(二分)

题目描述:

Drying

Time Limit: 2000MS Memory Limit: 65536K

It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She is not afraid of this boring process. Jane has decided to use a radiator to make drying faster. But the radiator is small, so it can hold only one thing at a time.

Jane wants to perform drying in the minimal possible time. She asked you to write a program that will calculate the minimal time for a given set of clothes.

There are n clothes Jane has just washed. Each of them took ai water during washing. Every minute the amount of water contained in each thing decreases by one (of course, only if the thing is not completely dry yet). When amount of water contained becomes zero the cloth becomes dry and is ready to be packed.

Every minute Jane can select one thing to dry on the radiator. The radiator is very hot, so the amount of water in this thing decreases by k this minute (but not less than zero — if the thing contains less than k water, the resulting amount of water will be zero).

The task is to minimize the total time of drying by means of using the radiator effectively. The drying process ends when all the clothes are dry.

Input

The first line contains a single integer n (1 ≤ n ≤ 100 000). The second line contains ai separated by spaces (1 ≤ ai ≤ 109). The third line contains k (1 ≤ k ≤ 109).

Output

Output a single integer — the minimal possible number of minutes required to dry all clothes.

Sample Input

sample input #1

3

2 3 9

5

sample input #2

3

2 3 6

5

Sample Output

sample output #1

3

sample output #2

2

题目大意:

烘干衣服的最短时间,烘干机以k单位水/min的速度蒸发,自然的话是1单位水/min

题目分析:

求一个最短时间,其实的话二分最短时间就可以,主要就是二分函数咋写。首先要有一个时间记录,等轮到这个衣服的时候,先看靠自然烘干还剩下多少水,然后呢,剩下的水由由两部分蒸发掉,一个是自然烘干,另外一个是烘干机时间,设烘干时间为x,(传到二分函数的参数为t,就是烘干所有衣服的时间),那么自然时间为t-x,列出不等式

k*x+t-x>=water[i]-time,那么x=(water-time-t+k-2)/(k-1),所以注意k=1的时候单拿出来就好了

代码:

#include "cstdio"
#include "algorithm"
using namespace std;
int n,k,cloth[100005];

bool c(int t)
{
    int time=0;
    for (int i = 0; i < n; ++i)
    {
        int more=cloth[i]-t;
        if(more>0)
        {
            time+=(more+k-2)/(k-1);
            if(time>t){
                return false;
            }
        }
    }
    return true;
}

int main()
{
    int lb,ub;
    while(scanf("%d",&n)!=EOF)
    {
        for (int i = 0; i < n; ++i)
        {
            scanf("%d",&cloth[i]);
        }
        scanf("%d",&k);
        if(k==1)
        {
            printf("%d\n",*max_element(cloth,cloth+n));
        }
        else{
            lb=1,ub=*max_element(cloth,cloth+n);
            while(ub-lb>1)
            {
                int mid=(lb+ub)>>1;
                if(c(mid)) ub=mid;
                else lb=mid;
            }
            printf("%d\n",ub);
        }
    }
    return 0;
}
时间: 2024-08-07 04:33:22

POJ 3104 Drying(二分)的相关文章

poj 3104 Drying (二分)

/*设某次二分出的一个值是mid: 1.对于一件ai值小于等于mid的衣服,直接晾干即可: 2.对于一件ai值大于mid值的衣服,最少的用时是用机器一段时间, 晾干一段时间,设这两段时间分别是x1和x2, 那么有mid=x1+x2,ai<=k*x1+x2,解得x1>=(ai-mid)/(k-1) , 所以对(ai-mid)/(k-1)向上取整就是该件衣服的最少用时.*/ # include <stdio.h> # include <string.h> # include

POJ 3104 Drying(二分答案)

题目链接:http://poj.org/problem?id=3104 Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11128   Accepted: 2865 Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She is not afra

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

传送门 表示又是神题一道 Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9327   Accepted: 2364 Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She is not afraid of this boring proces

POJ 3104 Drying (二分+精度)

题目链接:click here~~ [题目大意]: 题意:有一些衣服,每件衣服有一定水量,有一个烘干机,每次能够烘一件衣服,每分钟能够烘掉k单位水. 每件衣服没分钟能够自己主动蒸发掉一单位水, 用烘干机烘衣服时不蒸发.问最少须要多少时间能烘干全部的衣服. [解题思路]: 题目数据较大.常规方法肯定会TE.首先能够想到二分枚举答案.枚举时间mid值,(一般二分的题目,题目叫你求什么,就二分什么就能够了) 那么相应两种方法 1:自然风干.2:吹风机吹干 若一件衣服的水量小于mid,则自然风干就可以,

POJ - 3104 Drying 二分 + 贪心

题目大意:有n件湿的衣服,每件衣服都有相应的湿度,每分钟每件衣服的湿度减1(除了在烘干机里的衣服),现在有一个烘干机,烘干机一分钟可以让一件衣服的湿度降低k,问至少要花多少分钟才能使每件衣服的湿度为0 解题思路:贪心的话,每分钟都要使用到烘干机. 枚举时间,如果湿度小于等于时间的话,就不用考虑了,在枚举时间内肯定会干的 如果湿度大于枚举时间的话,就要考虑一下了,该衣服要在给定时间内湿度变为零的话就要满足该式子,设已经过了cnt分钟了,当前这件衣服的湿度为num[i],枚举的时间为mid,那么 (

POJ 3104 Drying(二分

Drying Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22163   Accepted: 5611 Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She is not afraid of this boring process. Jane has

POJ 3104 Drying

Drying Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 310464-bit integer IO format: %lld      Java class name: Main It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart g

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

Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smart girl. She is not afraid of this boring process. Jane has decided to use a radiator to make drying faster. But the radiator is small, so it can hold

POJ 3484 Showstopper 二分

 Showstopper Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1218   Accepted: 356 Description Data-mining huge data sets can be a painful and long lasting process if we are not aware of tiny patterns existing within those data sets. On