POJ 3104 Drying
最让HSQ学长头疼的就是洗衣服了。洗完之后,每件衣服都有一定单位水分,在不使用烘干器的情况下,每件衣服每分钟自然流失1个单位水分,但如果使用了烘干机则每分钟流失K个单位水分。令人遗憾是HSQ所在的宿舍楼只有1台烘干机,而每台烘干机同时只能烘干1件衣服,请问要想烘干N件衣服最少需要多长时间?
输入
第一行输入N,表示有N件衣服,第二行输入N件衣服的水分ai,第三行表示烘干机每分钟烘干水分K
其中
1 ≤ N ≤ 100 000,1 ≤ ai ≤ 10^9,1 ≤ K≤ 10^9输出
输出烘干N件衣服所需要的最短时间
样例输入
3
2 3 9
5
3
2 3 6
5
样例输出
3
2
一、
看一下数据大小就知道肯定不是一个一个衣服的求时间,既然不是从衣服下手,那我们就肯定要从时间上面下手了。。。对时间二分来确定时间是多少的时候才适合
所用时间最短是1分钟,最长时间是把水份最多的衣服晒干所用的时间(不用机器)
那么之后就要对二分的时间进行判定来确定它是否符合。。
1、如果衣服上面的水分小于这个二分的时间,那他就可以不用机器,直接晒干
2、如果水分大于,那就算出来他所需要的时间
这个时候他的水分可以看作是以两种方式损失的
1、自然晒干
2、机器催干(可以说是把机器每分钟晒干的水分看成两部分)
设其x1为自然晒干的时间
x2为机器晒干的时间
则有
1、mid=x1+x2
2、v[i]<=x1+x2*(k-1)
结出来得到:x2>=(v[i]-mid)/(k-1) 即作向上取整既可以
向上取整:
假如:a/s是一个小数
为了向上取整可以写作这样(a+s)/s
那么x2>=(v[i]-mid+k-2)/(k-1)
二、
之后就要说一下二分法在不同题之间的区别
1、如果是要在一个单调序列中找一个确定的值
//https://blog.csdn.net/dijiaxing1234/article/details/81178097
public static int rank(int key,int nums[])
{
//查找范围的上下界
int low=0;
int high=nums.length-1;
//未查找到的返回值
int notFind=-1;
while(low<=high)
{
//二分中点=数组左边界+(右边界-左边界)/2
//整数类型默认取下整
int mid=low+(high-low)/2;
//中间值是如果大于key
if(nums[mid]>key)
{
//证明key在[low,mid-1]这个区间
//因为num[mid]已经判断过了所以下界要减一
high=mid-1;
}else if(nums[mid]<key)
{
//证明key在[mid+1,high]这个区间
//同样判断过mid对应的值要从mid+1往后判断
low=mid+1;
}
else
{
//查找成功
return mid;
}
}
//未成功
return notFind;
}
2、就像这一道题,是从一段范围中求出来那个值符合本题,这个值是未知的,那就用以下这种方法
#include<stdio.h>
#include<string.h>
typedef long long ll;
ll max(ll x,ll y)
{
return x>y ? x: y;
}
ll v[100005];
int main()
{
ll a,s,d,f,g;
scanf("%lld",&a);
s=0;
for(int i=1;i<=a;++i)
{
scanf("%lld",&v[i]);
s=max(s,v[i]);
}
scanf("%lld",&d);
if(d==1) printf("%lld\n",s);
else
{
f=0;
g=s;
ll mid;
while(g-f>1) //要保证他们中间有一个来隔离g和f,否则这两个数就相邻了,或者f在g的右边这个样子【f,g】就不能成立,至于f==g的时候此处值在之前就证明过不可取
{ //因为f=0不会是结果,s分出来讨论过了,所以这两个值都不会是结果,之后讨论他们的一半,如果这个mid不行,才会赋值给f或g
mid=(f+g)/2;
ll temp=0;
for(int i=1;i<=a;++i)
{
if(v[i]<=mid) continue;
ll ans=(v[i]-mid+d-2)/(d-1);
temp+=ans;
}
if(temp>mid) f=mid;
else g=mid; 因为本题求的是最短时间,那么如果有一个值满足了,不能直接跳出来,还要接着搜索看看有没有比他更短的时间,所以这里time==mid的时候不能跳出循环
}
printf("%lld\n",g);
}
return 0;
}
本人菜鸡一枚,如有错误,求指出!
POJ 3104 Drying的更多相关文章
- POJ 3104 Drying(二分答案)
题目链接:http://poj.org/problem?id=3104 ...
- poj 3104 Drying(二分查找)
题目链接:http://poj.org/problem?id=3104 Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- POJ 3104 Drying 二分
http://poj.org/problem?id=3104 题目大意: 有n件衣服,每件有ai的水,自然风干每分钟少1,而烘干每分钟少k.求所有弄干的最短时间. 思路: 注意烘干时候没有自然风干. ...
- POJ 3104 Drying(二分答案)
[题目链接] http://poj.org/problem?id=3104 [题目大意] 给出n件需要干燥的衣服,烘干机能够每秒干燥k水分, 不在烘干的衣服本身每秒能干燥1水分 求出最少需要干燥的时间 ...
- POJ 3104 Drying [二分 有坑点 好题]
传送门 表示又是神题一道 Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9327 Accepted: 23 ...
- poj 3104 Drying(二分搜索之最大化最小值)
Description It is very hard to wash and especially to dry clothes in winter. But Jane is a very smar ...
- POJ 3104 Drying(二分
Drying Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 22163 Accepted: 5611 Descripti ...
- POJ 3104 Drying (经典)【二分答案】
<题目链接> 题目大意: 有一些衣服,每件衣服有一定水量,有一个烘干机,每次可以烘一件衣服,每分钟可以烘掉k滴水.每件衣服没分钟可以自动蒸发掉一滴水,用烘干机烘衣服时不蒸发.问最少需要多少 ...
- POJ 3104 Drying (二分+精度)
题目链接:click here~~ [题目大意]: 题意:有一些衣服,每件衣服有一定水量,有一个烘干机,每次能够烘一件衣服,每分钟能够烘掉k单位水. 每件衣服没分钟能够自己主动蒸发掉一单位水, 用烘干 ...
随机推荐
- openstack搭建之-glance配置(9)
一. base节点配置 #设置数据库,创建glance数据库,并设置权限 mysql -u root -proot CREATE DATABASE glance; GRANT ALL PRIVILEG ...
- Shell命令-文件及目录操作之mkdir、mv
文件及目录操作 - mkdir.mv 1.mkdir:创建目录 mkdir命令的功能说明 mkdir命令用于创建目录,默认情况下,要创建的目录已存在,会提示文件存在,不会继续创建目录. mkdir命令 ...
- JQ——利用一个开关,点击一个按钮完成展开收起功能
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 三、调试IIS启动域名配置
一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...
- 不同系统下的字长------typedef的意义
int的字节长度是由CPU和操作系统编译器共同决定的, 一般情况下,主要是由操作系统决定,比如,你在64位AMD的机器上安装的是32位操作系统,那么,int默认是32位的:如果是64位操作系统,64位 ...
- 建立ftp服务器的网址
https://jingyan.baidu.com/article/574c5219d466c36c8d9dc138.html
- SpringMvc的自动装箱和GET请求参数可以为自定义对象的思考
在我的概念里边,GET请求需要加上注解@RequestParam,然后它的参数类型只能是 基本数据类型 或者 基本数据类型的包装类,比如:@RequestParam String name(默认是必传 ...
- Magento 2 Plugin - Interceptor - Magento 2插件 - 拦截器-插件开发
Magento 2 Plugin - Interceptor - Magento 2插件 - 拦截器 Magento 2 Plugin is a technical plugin for your b ...
- 【并发编程】【JDK源码】J.U.C--线程池
原文:慕课网实战·高并发探索(十四):线程池 Executor new Thread的弊端 每次new Thread 新建对象,性能差. 线程缺乏统一管理,可能无限制的新建线程,相互竞争,可能占用过多 ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...