POJ3104: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 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

二分枚举时间

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define up(i,x,y) for(i=x;i<=y;i++)
#define down(i,x,y) for(i=x;i>=y;i--)
#define mem(a,b) memset(a,b,sizeof(a))
#define w(a) while(a)
#define ll long long
int n;
int a[100005],k,ans,r,maxn,l,mid;

int solve(int x)
{
    int i,sum=0;
    up(i,0,n-1)
    {
        if(a[i]>x)
        {
            sum+=(a[i]-x+k-2)/(k-1);
            if(sum>x) return 0;
        }
    }
    return 1;
}
int main()
{
    int i,j;
    w(~scanf("%d",&n))
    {
        maxn=0;
        up(i,0,n-1)
        scanf("%d",&a[i]);
        sort(a,a+n);
        scanf("%d",&k);
        if(k==1)
        {
            printf("%d\n",a[n-1]);
            continue;
        }
        l=1,r=a[n-1];
        w(l<=r)
        {
            mid=l+(r-l)/2;
            if(solve(mid))
            {
                ans=mid;
                r=mid-1;
            }
            else
                l=mid+1;

        }
        printf("%d\n",ans);
    }
    return 0;
}

POJ3104:Drying(二分)

时间: 2024-08-01 23:10:26

POJ3104:Drying(二分)的相关文章

POJ3104 Drying [二分]

题目不是很难 大体思路: 题意:烘干机,给出一堆衣服的水分a[i],在不加烘干机情况下自动每一分钟减少1水分,每分钟可以变改衣服(i)到烘干机中,每分钟减少k水分,求最少需要多少时间. 题解:第一时间就想到使用二分枚据答案+验证这种思路,不过这题还是有些陷阱需要注意. 1. 验证答案时,如果 a[i] <= mid,让它自然烘干即可 : 如果a[i] > mid,那么烘干这件衣服可以分成两段时间:使用烘干机时间x1 + 自然烘干时间x2,那么可以列出等式:mid = x1 + x2; a[i]

POJ3104 Drying(二分查找)

POJ3104 Drying /* * Created: 2016年03月31日 22时25分12秒 星期四 * Author: Akrusher * */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <iostream> #include <algorithm> #in

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 [二分 有坑点 好题]

传送门 表示又是神题一道 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(二分答案)

题目链接: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 (二分+精度)

题目链接: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 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. B

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