博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3296--Rinse(三分)
阅读量:6439 次
发布时间:2019-06-23

本文共 1951 字,大约阅读时间需要 6 分钟。

题目链接:

题目大意:有一个酒桶容量为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 
#include
#include
#include
using namespace std ;#define eqs 1e-9int 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 ;}

转载地址:http://jqzwo.baihongyu.com/

你可能感兴趣的文章
linux下root密码修改方法
查看>>
添加操作。。。
查看>>
Bootstrap框架
查看>>
MSHTML
查看>>
Android学习记录:SQLite数据库、res中raw的文件调用
查看>>
The 'microsoft.jet.oledb.4.0' provider is not registered on the local machin
查看>>
验证视图状态MAC失败的解决办法
查看>>
拦截器,过滤器,监听器原理
查看>>
P1312 Mayan游戏 [模拟][搜索]
查看>>
洛谷P4319 变化的道路
查看>>
LOJ#2353 货币兑换
查看>>
使用装饰器时带括号与不带括号的区别
查看>>
Linux终端乱码的解决办法
查看>>
解决问题Can’t connect to local MySQL server through socket
查看>>
图像像素灰度内插(Matlab实现)
查看>>
2017面试题1
查看>>
css 宽高自适应的div 元素 如何居中 垂直居中
查看>>
[转载]基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
查看>>
Python基础4_列表,元祖
查看>>
ASP.NET MVC区域
查看>>