Drying

Time Limit: 2000MS Memory Limit: 65536K

Total Submissions: 20586 Accepted: 5186

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


解题心得:

  1. 题意就是有n件衣服,每件衣服有一个湿润度,有一个烘干机,每次可以烘干一件衣服,每分钟烘干k的水分,每分钟可以选择放入/拿出一件衣服,如果衣服没有放入烘干机那么衣服每分钟会自然蒸发1水分。问怎么才能将所有衣服烘干并且所花时间要最少,最少时间是多少。
  2. 其实难点是如果不放入烘干机中衣服每分钟会自然蒸发1水分,那么有没有办法将自然蒸发这个条件去掉呢,其实还是可以的,我们可以假设用了m分钟,那么自然烘干的水分就是每件衣服m的水分,剩下的水分就是使用烘干机烘干的。但是每次枚举m分钟肯定会超时,那么就可以用到二分了,如果枚举出来的时间可以将衣服全烘干,那么就可以缩小时间,如果不能就扩大时间,二分得到最后的答案。

#include <algorithm>
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn = 1e5+100;
int n,k,water[maxn]; void init() {
for(int i=0;i<n;i++)
scanf("%d",&water[i]);
scanf("%d",&k);
} bool checke(ll time) {
ll min_time = 0;
for(int i=0;i<n;i++) {
if(water[i] <= time)
continue;
else {
int temp = water[i] - time;
min_time += temp/(k-1);
if(temp % (k-1))
min_time++;
}
}
if(min_time <= time)
return true;
return false;
} ll binary_search() {
ll l,r;
l = 0, r = 1e9+100;
while(r - l > 1) {
ll mid = (l+r) >> 1;
if(checke(mid))
r = mid;
else
l = mid;
}
return r;
} int main() {
while(scanf("%d",&n) != EOF) {
init();
if(k == 1) {
int Max = -1;
for(int i=0;i<n;i++)
Max = max(Max,water[i]);
printf("%d\n",Max);
continue;
}
ll ans = binary_search();
printf("%lld\n",ans);
}
return 0;
}

POJ:3104-Drying(神奇的二分)的更多相关文章

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

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

  2. POJ 3104 Drying(二分答案)

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

  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(二分查找)

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

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

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

  7. POJ 3104 Drying(二分

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

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

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

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

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

  10. POJ 3104 Drying

    最让HSQ学长头疼的就是洗衣服了.洗完之后,每件衣服都有一定单位水分,在不使用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分.令人遗憾是HSQ所在的宿舍 ...

随机推荐

  1. XHML教会我的一些东西-4

    今天把“河畔林语”的项目看完了.我自己也试着做了一下,这算是自己写的第一个项目吧.虽然全部是模仿,而且经常一边看写好的一边自己写,还是自己不够成熟呀. 不知道为什么,我用我的电脑进http://www ...

  2. Python常用模块(三)

    一.shelve模块 shelve也是一种序列化方式,在python中shelve模块提供了基本的存储操作,shelve中的open函数在调用的事和返回一个shelf对象,通过该对象可以存储内容,即像 ...

  3. baidu-aip-SDK node.js 身份证识别

    最近项目中客户需要实现身份证识别功能,合理计划了之后决定使用百度ai的身份证识别. 身份证识别是文字识别的一种,类似的功能有很多比如驾驶证识别等等,原理都是相同的. 对于前端初学者来说,如果要实现这种 ...

  4. GitHub webstorm 及 README.md 姿势

    README.md 语法格式: 规范的README文件开头都写上一个标题,这被称为大标题. 标题: #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 ...

  5. Cocos2D-HTML5 Android项目编译

    首先要有 Eclipse 和 ADT.CDT.Android SDK.Android NDK.新建一个文件MoonWar_Apk.cmd,将以下代码拷贝其中,双击之即可. set EngineHome ...

  6. Struts2_HelloWorld_5

    1.设置开发模式: 更换配置文件中的 action name="hello_struts",重新访问会出错,因为配置没有立刻响应文件的即时修改. 需要加上配置 <consta ...

  7. WINCC runtime连接SIMOTION simulator SIMOSIM

    测试使用的软件版本 TIA Portal V14sp1 Windows7 sp1 (professional) Scout 5.1(integrated in TIA 集成项目) VMware wor ...

  8. 1.08 在select语句使用条件逻辑

    问题:要在select语句中,对数值执行if-else操作.例如,要产生一个结果集,如果一个员工工资小于等于2000美金,就返回消息”underpaid”:如果大于等于4000美金:就返回消息”ove ...

  9. 裁剪插件jCrop

    为大家介绍个插件:jCrop.这个插件被我用在了多个项目中,如通过画热力图来查看某块地方用户的浏览数,放大缩小拖动选框来实时预览所选区域的图片病裁剪,设置头像是选框必须要是正方形,它有着丰富的配置参数 ...

  10. tensorflow与android编译

    我的过程: 1.下载tensorflow 2.下载ndk.sdk然后放到了tensorflow的目录下 3,修改workspace 4.运行命令:bazel build -c opt //tensor ...