【POJ No. 3104】 烘干衣服 Drying

POJ题目地址

【题意】

可以使用散热器烘干衣服。但散热器很小,所以它一次只能容纳一件衣服。

简有n 件衣服,每件衣服在洗涤过程中都带有ai 的水。在自然风干的情况下,每件衣服的含水量每分钟减少1(只有当物品还没有完全干燥时)。当含水量变为零时,布料变干并准备好包装。

在散热器上烘干时,衣服的含水量每分钟减少k (如果衣服含有少于k 的水,则衣服的含水量变为零)。请有效地使用散热器来最小化烘干的总时间。

【输入输出】

输入:

第1行包含一个整数n (1≤n ≤10^5 );第2行包含ai(1≤ai ≤10^9 ,1≤i ≤n );第3行包含k (1≤k ≤10^9 )。

输出:

单行输出烘干所有衣服所需的最少时间。

【样例】

【思路分析】

假设烘干所有衣服所需的最少时间为mid,如果所有衣服的含水量a [i ]都小于mid,则不需要用烘干机,自然风干的时间也不会超过mid。如果有的衣服a [i ]大于mid,则让所有a [i ]大于mid的衣服使用烘干机,让a [i ]不大于mid的衣服自然风干即可。

假设衣服a [i ]>mid,用了t 时间的烘干机,对剩余的时间mid-t选择自然风干,那么a [i ]=k ×t +mid-t ,t =(a [i ]-mid)/(k-1)。只需判断这些a [i ]大于mid的衣服使用烘干机的总时间有没有超过mid,如果超过,则不满足条件。

【算法设计】

① 按照a [i ]从小到大排序。

② 如果k =1,则直接输出a [n -1],算法结束。

③ 进行二分搜索,l =1,r =a [n -1],mid=(l +r )>>1,判断最少烘干时间为mid是否可行,如果可行,则r =mid-1,减少时间继续搜索;否则l =mid+1,增加时间继续搜索。当l >r 时停止。

④ 判断最少烘干时间为mid是否可行。对所有a [i ]>mid的衣服使用烘干机,用sum累加使用烘干机的时间,如果sum>mid,则说明不可行,返回0。当所有衣服都处理完毕时,返回1。

【注意】
① 对t 的结果需要向上取整,因为如果有余数,再用一次烘干机无非就是多1个时间,但是如果自然风干,则至少用1个时间。
② 公式中的分母是k -1,因此在k =1时需要单独判断特殊情况,直接输出最大的含水量即可,不然会超时。

【算法实现】

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>using namespace std;
int n , k;int a[100010];int judge(int x){int sum = 0;for(int i = 0 ; i < n ; i++){if(a[i] > x){sum += (a[i] - x + k - 2) / (k - 1); //向上取整 }if(sum > x){return 0;}}return 1;
}void solve(){int l = 1 , r = a[n - 1] , ans;while(l <= r){int mid = (l + r) >> 1;if(judge(mid)){ans = mid;r = mid - 1; //减小 }else{l = mid + 1; //增大 }}cout << ans << endl;
}int main(){while(~scanf("%d", &n)){for(int i = 0 ; i < n ; i++){scanf("%d" , &a[i]);}scanf("%d" , &k);sort(a , a + n);if(k == 1){printf("%d\n" , a[n - 1]);continue;}solve();}return 0;
}

【POJ No. 3104】 烘干衣服 Drying相关推荐

  1. Divide and conquer:Drying(POJ 3104)

    烘干衣服 题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘干衣服? ...

  2. 【算法总结】二分搜索

    一. STL函数 lower_bound() 试图在已排序的 [first, last) 中寻找元素 value.返回一个迭代器,指向第一个"不小于 value"的元素,如果 va ...

  3. 数字IC笔试题---千题解,量大管饱,图文并茂

    前言 出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的. 所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料整理来自于& ...

  4. 2021年暑期训练阶段四Day2

    目录 A - Drying B - Garland C - How Many Tables D - Can you solve this equation? E - CD F - Monthly Ex ...

  5. 笔记本电脑控制面板在哪_2020年滚筒洗衣机选购指南:滚筒洗衣机应该怎么选?哪一些滚筒洗衣机性价比更高?...

    滚筒洗衣机以其独特的特点和功能的多样性被现在很多家庭所接纳,很多人都想入手一台滚筒洗衣机,因为他最大的特点就是速度,符合现在快节奏的生活,另外杀菌.省电.省水.清洁度和卫生性方面也很好. 但是现在市面 ...

  6. 细菌大盘点(二) | 葡萄球菌、沙门氏菌、弯曲杆菌

    谷禾健康 介绍三种菌: 葡萄球菌.沙门氏菌. 弯曲杆菌 01 葡萄球菌 Staph 葡萄球菌是一群革兰氏阳性球菌,因常堆聚成葡萄串状,故名.多数为非致病菌,少数可导致疾病.可以生活在人的皮肤.口腔或鼻 ...

  7. 热泵烘干机原理介绍,提供烘干房温度-奥伯特

    热泵烘干机工作原理 Working Principle AOBOTE热泵烘干机属于高温热泵机组,其工作原理是:利用冷媒经过压缩机压缩,成为高温高压气体,进入冷凝器,冷凝液化放热,用于烘干房空气加热,从 ...

  8. 每周分享第 35 期

    这里记录过去一周,我看到的值得分享的东西,每周五发布. 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue. 媒体报道,50岁以上的日本男性每四人就有 ...

  9. 你是否清楚,什么是真正的八拜之交?

    你是否清楚,什么是真正的八拜之交? 导读: 1)知音之交--伯牙子期      2)刎颈之交--廉颇相如     3)胶膝之交--陈重雷义     4)鸡黍之交--元伯巨卿     5)舍命之交--角 ...

最新文章

  1. 交情来自一系列的交易
  2. Hello Jsilk
  3. R语言威尔考克森秩和统计分布函数Wilcoxon rank Sum Statistic Distribution(dwilcox, pwilcox, qwilcox rwilcox)实战
  4. android 图片加载 软引用_Android 解决图片大量下载:软引用必须懂4点
  5. iOS 11和xcode9
  6. 天涯共此式 有AI月更圆
  7. .NET的Snk使用方法
  8. Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话
  9. iSCSI存储设备的udev绑定 以及iscsi重启卡住解决方法
  10. 苹果:iOS 比 Android 更安全!
  11. 如何解决线程安全问题?有几种方式?synchronized与lock有什么异同?
  12. java random.nextbyte_java.util.Random.next()方法实例
  13. Java LinkedHashMap类
  14. 冬日暖阳!网易大数据应用与分析实践分享沙龙【北京站 12.16】
  15. 深度学习面试题汇总大全(转)
  16. Ubuntu 20:Cadence IC615集成HSPICE
  17. python不等于怎么表达_Python不等于怎么写
  18. .Net Winform 开发笔记(四) 透过现象看本质
  19. 如何关闭Mybatis的DEBUG log打印
  20. python soup attrs_python模块之beautifulSoup

热门文章

  1. 找一个有钱的男朋友是什么体验?
  2. 人生里的酸甜苦辣,缺了哪样都是遗憾
  3. 兰州大学计算机专业张教授,兰州大学信息科学与工程学院
  4. latex 图片、表格、定义、理论 简单示例
  5. Java综合实践——学生成绩查询系统
  6. 微信小程序自定义导航
  7. 终于搞清楚为啥微信刚打开聊天界面时会卡那么一下了
  8. 基于opencv和Dlib的人脸交换(face swap)
  9. PIC单片机之I/O控制
  10. 线性高斯反问题的解--最大似然法