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单位水. 每件衣服没分钟能够自己主动蒸发掉一单位水, 用烘干 ...
随机推荐
- Git—分支管理
Git—分支管理 分支学习:branch称为分支,默认仅有一个名为master的分支.一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支. branch相关常用 ...
- JAVA并发包学习
1)CyclicBarrier一个同步辅助类,允许一组线程相互等待,直到这组线程都到达某个公共屏障点.该barrier在释放等待线程后可以重用,因此称为循环的barrier 2)CountDownLa ...
- AngularJS 1.x系列:AngularJS过滤器(4)
1. AngularJS过滤器(Filter)使用方法 AngularJS中过滤器(Filter)主要功能是格式化数据. AngularJS过滤器使用方法有3种: ◊ 在表达式{{}}中使用 ◊ 在指 ...
- Python——网络编程基础
一.TCP/IP 是Internet的基础协议,分四层应用层(HTTP,SMTP),传输层(TCP/UDP),网络层(IP),接口层 二.常用默认端口号 80-TCP-HTTP 23-TCP-TELN ...
- Django初印象之视图(view)
一.view的初印象 一个视图函数(类),简称视图.我们发起web请求时,返回的web响应.[大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中.] ...
- UVA 10618 Tango Tango Insurrection
https://vjudge.net/problem/UVA-10618 题目 你想学着玩跳舞机.跳舞机的踏板上有4个箭头:上.下.左.右.当舞曲开始时,屏幕上会有一些箭头往上移动.当向上移动箭头与顶 ...
- Nginx 进程间如何共享内存
L:37 Nginx 针对多进程用的是自旋锁(占用共享内存时间比较短的情况下否则可能会影响性能)注:自旋锁是不停的请求共享内存 而原先的信号量是等待占用者释放后通知等待的进程
- Flask 构建微电影视频网站(四)
后台管理 实现后台管理系统使用flask sqlalchemy结合mysql数据库进行增删改查操作.分页的使用.路由装饰器定义.模板中变量调用.登录会话机制.上传文件.flask wtforms表单使 ...
- 怎样在ISE14.7中固化FLASH文件
前言 当工程开发完成后,bit文件类型掉电后会消失,而此时采用FLASH固化就很重要了. 软件版本:ISE14.7 流程 1.对生成FLASH文件进行设置:配置速率为33,选择66貌似配置失败,中庸之 ...
- mongoDB 文档操作_查
基本查询命令 find 查找复合条件的所有文档 命令 db.collection.find(query,field) 参数 query 查找条件 格式: {ssss:"xxx"}是 ...