poj3296--Rinse(三分)
题目链接:点击打开链接
题目大意:有一个酒桶容量为Vc。里面还有Vw的酒,如今用Vb的水去刷酒桶,每次酒桶的内壁上会留下Vr的液体,最多能够刷k次,问怎么样刷酒桶。能够让酒桶里面的就最少。
假设Vb+Vw < Vc,那么直接输出0
那么其他情况就保证了一定能够向外倒水。所以终于的桶里面剩余的液体是Vr。仅仅要保证Vr内的酒的浓度最小。那么剩余的酒也就是最少的。
能够假设用的水是x1,x2,x3,,,,计算每次刷通后的浓度。
第一次刷:Vw / (Vw+x1)
第二次刷:Vw / (Vw+x1) * Vr / (Vr+x2)
第三次刷:Vw / (Vw+x1) * Vr / (Vr+x2)
* Vr / (Vr+x3)
这样也就能看出来,假设洗刷k次,那么终于的浓度是Vw / (Vw+x1)
* Vr / (Vr+x2)
* Vr / (Vr+x3),,,,* Vr / (Vr+xk)
那么怎样保证它的值最小呢?假设我们能确定一个x1,那么x2+x3,,,+xk = Vb-x1,这种条件怎么保证Vr
/ (Vr+x2) * Vr / (Vr+x3),,,,* Vr / (Vr+xk)尽量小。我们能够发现,假设x2 = x3 = x4 ,, = xk计算出的结果会比不同的更小,假设x的值都是(Vb-x1)/(k-1),那么k越大,得到的值就越小。(Vb-x1)/(k-1)越大,那么得到的值越小。
所以选择最多的刷洗次数,从第2次到第k次,每次用水同样,那么剩下的就是x1怎么确定。
假设x1添加。那么Vw
/ (Vw+x1)会减小。(Vb-x1)/(k-1)会减小,(Vr/(Vr+x))^(k-1)就会增大,总的浓度不能确定,所以用三分查找,找到一个最小的结果。
注意
1、三分的时候桶内的就有Vw。注意三分的上下界。
2、在计算浓度的时候,向桶内加的水由Vb-x算出,可是这个值不能超多Vc-Vr
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std ;
#define eqs 1e-9
int k ;
double vb , vw , vr , vc ;
double solve(double x) {
double ans = vw/(vw+x) ;
if( k > 1 ) {
double y = min( (vb-x)/(k-1), vc-vr) ;
for(int i = 1 ; i < k ; i++)
ans *= vr/(vr+y) ;
}
return ans ;
}
int main() {
while( scanf("%d", &k) != EOF ) {
if(k == 0) break ;
scanf("%lf %lf %lf %lf", &vb, &vw, &vr, &vc) ;
if( vr-vw-vb > eqs ) {
printf("0\n") ;
continue ;
}
double low = max(0.0,vr-vw) , mid1 , mid2 , high = min(vb,vc-vw) ;
while( low + eqs < high ) {
mid1 = (low + high)/2.0 ;
mid2 = (mid1 + high)/2.0 ;
if( solve(mid1) > solve(mid2) ) {
low = mid1 ;
}
else
high = mid2 ;
}
printf("%d", k) ;
printf(" %.2f", high) ;
if( k > 1 ) high = min(vc-vr,(vb-low)/(k-1)) ;
for(int i = 1 ; i < k ; i++) {
printf(" %.2f", high) ;
}
printf("\n") ;
}
return 0 ;
}
poj3296--Rinse(三分)的更多相关文章
- hdu3714 三分找最值
Error Curves Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- BZOJ 1857 传送带 (三分套三分)
在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...
- hdu 4717(三分求极值)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 思路:三分时间求极小值. #include <iostream> #include ...
- HDU2438 数学+三分
Turn the corner Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- 三分之一的程序猿之社交类app踩过的那些坑
三分之一的程序猿之社交类app踩过的那些坑 万众创新,全民创业.哪怕去年陌生人社交不管融资与否都倒闭了不知道多少家,但是依然有很多陌生人社交应用层出不穷的冒出来.各种脑洞大开,让人拍案叫起. 下面我们 ...
- 基于jPlayer的三分屏制作
三分屏,这里的三分屏只是在一个播放器里同时播放三个视频,但是要求只有一个控制面板同时控制它们,要求它们共享一个时间轨道.这次只是简单的模拟了一下功能,并没有深入的研究. 首先,需要下载jPlayer, ...
- 【BZOJ-1857】传送带 三分套三分
1857: [Scoi2010]传送带 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 1077 Solved: 575[Submit][Status][ ...
- ACM : HDU 2899 Strange fuction 解题报告 -二分、三分
Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- bzoj1857: [Scoi2010]传送带--三分套三分
三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...
- poj3301Texas Trip(三分)
链接 这题还真没看出来长得像三分.. 三分角度,旋转点. 最初找到所有点中最左边.右边.上边.下边的点,正方形边长为上下距离和左右距离的最大值,如图样例中的四个点(蓝色的),初始正方形为红色的正方形. ...
随机推荐
- 多重背包(MultPack = ZeroOnePack + CompletePack)
HiHoCoder_offer6_04 题目4 : 奖券兑换 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi在游乐园中获得了M张奖券,这些奖券可以用来兑换奖品. ...
- 涨知识 --- VI
1.空类所占空间大小 空类所占空间为1,单一继承的空类空间也为1,多继承的空类空间还是1.但是虚继承涉及虚表(虚指针),所以sizeof(C)的大小为4. 2.内联函数与宏定义 Ans:内联函数和普通 ...
- the interview questions of sql server
1.一道SQL语句面试题,关于group by 表内容: 2005-05-09 胜 2005-05-09 胜 2005-05-09 负 2005-05-09 负 2005-05-10 胜 2005-0 ...
- 前端-Node.js思维导图笔记
看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记
- jsessionid什么时候生成并传递到前端的?
jsessionid什么时候生成并传递到前端的? 如果客户端请求的cookie中不包含JSESSIONID,服务端调用request.getSession()时就会生成并传递给客户端,此次响应 ...
- CI框架3.x 之实现前后端分离
一.建立合理的目录结构 admin与home为后台和前台的控制器和模板文件夹 二.定义前后台视图路径常量 在constants.php中添加如下代码: //定义前台视图路径常量 define('HOM ...
- openstack——cinder服务篇
一.cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文 ...
- API 接口监控产品全新改版,免费开放全部功能
作为 EOLINKER 研发管理体系的重要一环,EOLINKER 接口监控即 AMT 产品将在 3月4日 迎来全新变化,AMT 产品将正式命名为 EOLINKER-API Beacon --API-烽 ...
- 【python】详解numpy库与pandas库axis=0,axis= 1轴的用法
对数据进行操作时,经常需要在横轴方向或者数轴方向对数据进行操作,这时需要设定参数axis的值: axis = 0 代表对横轴操作,也就是第0轴: axis = 1 代表对纵轴操作,也就是第1轴: nu ...
- Python-程序的控制结构
程序的分支结构 >单分支结构 根据判断条件结果而选择不同向前路径的运行方式 if <条件>: <语句块> 代码示例: guess = eval(input()) if g ...