【POJ No. 3104】 烘干衣服 Drying
【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相关推荐
- Divide and conquer:Drying(POJ 3104)
烘干衣服 题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘干衣服? ...
- 【算法总结】二分搜索
一. STL函数 lower_bound() 试图在已排序的 [first, last) 中寻找元素 value.返回一个迭代器,指向第一个"不小于 value"的元素,如果 va ...
- 数字IC笔试题---千题解,量大管饱,图文并茂
前言 出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的. 所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料整理来自于& ...
- 2021年暑期训练阶段四Day2
目录 A - Drying B - Garland C - How Many Tables D - Can you solve this equation? E - CD F - Monthly Ex ...
- 笔记本电脑控制面板在哪_2020年滚筒洗衣机选购指南:滚筒洗衣机应该怎么选?哪一些滚筒洗衣机性价比更高?...
滚筒洗衣机以其独特的特点和功能的多样性被现在很多家庭所接纳,很多人都想入手一台滚筒洗衣机,因为他最大的特点就是速度,符合现在快节奏的生活,另外杀菌.省电.省水.清洁度和卫生性方面也很好. 但是现在市面 ...
- 细菌大盘点(二) | 葡萄球菌、沙门氏菌、弯曲杆菌
谷禾健康 介绍三种菌: 葡萄球菌.沙门氏菌. 弯曲杆菌 01 葡萄球菌 Staph 葡萄球菌是一群革兰氏阳性球菌,因常堆聚成葡萄串状,故名.多数为非致病菌,少数可导致疾病.可以生活在人的皮肤.口腔或鼻 ...
- 热泵烘干机原理介绍,提供烘干房温度-奥伯特
热泵烘干机工作原理 Working Principle AOBOTE热泵烘干机属于高温热泵机组,其工作原理是:利用冷媒经过压缩机压缩,成为高温高压气体,进入冷凝器,冷凝液化放热,用于烘干房空气加热,从 ...
- 每周分享第 35 期
这里记录过去一周,我看到的值得分享的东西,每周五发布. 欢迎投稿,或推荐你自己的项目,请前往 GitHub 的 ruanyf/weekly 提交 issue. 媒体报道,50岁以上的日本男性每四人就有 ...
- 你是否清楚,什么是真正的八拜之交?
你是否清楚,什么是真正的八拜之交? 导读: 1)知音之交--伯牙子期 2)刎颈之交--廉颇相如 3)胶膝之交--陈重雷义 4)鸡黍之交--元伯巨卿 5)舍命之交--角 ...
最新文章
- 交情来自一系列的交易
- Hello Jsilk
- R语言威尔考克森秩和统计分布函数Wilcoxon rank Sum Statistic Distribution(dwilcox, pwilcox, qwilcox rwilcox)实战
- android 图片加载 软引用_Android 解决图片大量下载:软引用必须懂4点
- iOS 11和xcode9
- 天涯共此式 有AI月更圆
- .NET的Snk使用方法
- Oracle 每个session的限制,限制oracle普通用户能且只能kill自己的会话
- iSCSI存储设备的udev绑定 以及iscsi重启卡住解决方法
- 苹果:iOS 比 Android 更安全!
- 如何解决线程安全问题?有几种方式?synchronized与lock有什么异同?
- java random.nextbyte_java.util.Random.next()方法实例
- Java LinkedHashMap类
- 冬日暖阳!网易大数据应用与分析实践分享沙龙【北京站 12.16】
- 深度学习面试题汇总大全(转)
- Ubuntu 20:Cadence IC615集成HSPICE
- python不等于怎么表达_Python不等于怎么写
- .Net Winform 开发笔记(四) 透过现象看本质
- 如何关闭Mybatis的DEBUG log打印
- python soup attrs_python模块之beautifulSoup