Poj 3104 Drying

来源:互联网 发布:天猫双十一销售额数据 编辑:程序博客网 时间:2024/06/05 16:28
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 byk 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 containsai separated by spaces (1 ≤ ai ≤ 109). The third line containsk (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
Source

Northeastern Europe 2005, Northern Subregion

2分 关键注意整型

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>const int maxn = 100000 + 10 ;int a[maxn] ;using namespace std;int main() {    int k , n ;    while(~scanf("%d",&n)) {        for( int i = 0 ; i < n ; ++i ) {            scanf("%d",&a[i]) ;        }        sort( a , a + n )  ;        scanf("%d",&k) ;        if( k == 1) {            printf("%d\n",a[n-1]) ;            continue ;        }        int ans = 0 ;        int l =  1 , r = a[n-1] ;                        // 2分边界        while(l <= r) {                int mid = l+(r-l)/2;                int init = 0 , falg = 0;    <span style="white-space:pre"></span>//切忌定义为ans = 0 ;                   for( int i = 0 ; i < n ; ++i ) {                    if( a[i] > mid ){                        init += (a[i] - mid + k - 2)/(k-1) ;                      }                    if( init > mid ){                        falg  = 1 ;                        break;                    }            }            if( !falg ) {                r = mid -1 ;                ans = mid ;            }            else{                l = mid +1 ;            }        }        printf("%d\n",ans) ;    }    return 0    ;}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 住房基金查询 娄底住房公积金查询 住房公积金查询余额 贵港住房公积金查询 东莞市住房公积金管理中心 住房公积金网站 广州住房公积金查询 河南省住房公积金查询 福州住房公积金管理中心 常州住房公积金查询 遂宁市住房公积金管理中心 天津市住房公积金管理中心 湖南住房公积金查询个人账户 深圳住房公积金电话 住房公积金查询网 洛阳住房公积金 呼和浩特住房公积金查询 青海省住房公积金查询 郑州住房公积金管理中心 苏州住房公积金查询 成都住房公积金查询个人账户 住房公积金中心电话 昆山住房公积金管理中心 吉林市住房公积金查询 沈阳住房公积金 沈阳住房公积金管理中心 贵港市住房公积金管理中心 萍乡住房公积金查询 郑州市住房公积金 赣州市住房公积金管理中心 济南住房公积金查询 济宁市住房公积金个人查询 西安住房公积金查询网 西安市住房公积金中心 西安市住房公积金 西安市住房公积金管理中心 西安市个人住房公积金查询 个人住房公积金查询个人账户 西安住房公积金个人帐户查询 住房公积金账户 查询住房公积金个人账户余额