题目链接:点击打开链接

题目大意:有一个酒桶容量为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

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <algorithm>
  5. using namespace std ;
  6. #define eqs 1e-9
  7. int k ;
  8. double vb , vw , vr , vc ;
  9. double solve(double x) {
  10. double ans = vw/(vw+x) ;
  11. if( k > 1 ) {
  12. double y = min( (vb-x)/(k-1), vc-vr) ;
  13. for(int i = 1 ; i < k ; i++)
  14. ans *= vr/(vr+y) ;
  15. }
  16. return ans ;
  17. }
  18. int main() {
  19. while( scanf("%d", &k) != EOF ) {
  20. if(k == 0) break ;
  21. scanf("%lf %lf %lf %lf", &vb, &vw, &vr, &vc) ;
  22. if( vr-vw-vb > eqs ) {
  23. printf("0\n") ;
  24. continue ;
  25. }
  26. double low = max(0.0,vr-vw) , mid1 , mid2 , high = min(vb,vc-vw) ;
  27. while( low + eqs < high ) {
  28. mid1 = (low + high)/2.0 ;
  29. mid2 = (mid1 + high)/2.0 ;
  30. if( solve(mid1) > solve(mid2) ) {
  31. low = mid1 ;
  32. }
  33. else
  34. high = mid2 ;
  35. }
  36. printf("%d", k) ;
  37. printf(" %.2f", high) ;
  38. if( k > 1 ) high = min(vc-vr,(vb-low)/(k-1)) ;
  39. for(int i = 1 ; i < k ; i++) {
  40. printf(" %.2f", high) ;
  41. }
  42. printf("\n") ;
  43. }
  44. return 0 ;
  45. }

poj3296--Rinse(三分)的更多相关文章

  1. hdu3714 三分找最值

    Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  2. BZOJ 1857 传送带 (三分套三分)

    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxhgww想从 ...

  3. hdu 4717(三分求极值)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 思路:三分时间求极小值. #include <iostream> #include ...

  4. HDU2438 数学+三分

    Turn the corner Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  5. 三分之一的程序猿之社交类app踩过的那些坑

    三分之一的程序猿之社交类app踩过的那些坑 万众创新,全民创业.哪怕去年陌生人社交不管融资与否都倒闭了不知道多少家,但是依然有很多陌生人社交应用层出不穷的冒出来.各种脑洞大开,让人拍案叫起. 下面我们 ...

  6. 基于jPlayer的三分屏制作

    三分屏,这里的三分屏只是在一个播放器里同时播放三个视频,但是要求只有一个控制面板同时控制它们,要求它们共享一个时间轨道.这次只是简单的模拟了一下功能,并没有深入的研究. 首先,需要下载jPlayer, ...

  7. 【BZOJ-1857】传送带 三分套三分

    1857: [Scoi2010]传送带 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 1077  Solved: 575[Submit][Status][ ...

  8. ACM : HDU 2899 Strange fuction 解题报告 -二分、三分

    Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  9. bzoj1857: [Scoi2010]传送带--三分套三分

    三分套三分模板 貌似只要是单峰函数就可以用三分求解 #include<stdio.h> #include<string.h> #include<algorithm> ...

  10. poj3301Texas Trip(三分)

    链接 这题还真没看出来长得像三分.. 三分角度,旋转点. 最初找到所有点中最左边.右边.上边.下边的点,正方形边长为上下距离和左右距离的最大值,如图样例中的四个点(蓝色的),初始正方形为红色的正方形. ...

随机推荐

  1. 【转】Linux字符转换命令col

    转自:http://www.cnblogs.com/ningvsban/p/3725464.html [root@www ~]# col [-xb]选项与参数:-x :将 tab 键转换成对等的空格键 ...

  2. hibernate annotation 之 一对多、多对一双向外键关联

    假设,一个农场产出多种植物,具体的某一植物产于某一农场. 3 import java.io.Serializable; 4 import java.util.Set; 5 import javax.p ...

  3. 背包系列 hdu3449 有依赖背包

    这道题真正困扰了笔者3,4天,冥思苦想几日无果之后,只能去找大牛的解法.结合网上的大牛解法与自己的理解,笔者终于解决了这个坑了,在此小庆幸一下. 原题如下: Consumer Time Limit: ...

  4. Codeforces_732D_(二分贪心)

    D. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...

  5. ipv4的设置

    有段时间自己的网总是连不上,别人的都可以,因为公司又wifi,就将就着用wifi了,没有去查看原因,后来由于公司1网段大部分ip号被占用,系统要接入32路主机测试,每个主机都要分配ip,只好开辟2网段 ...

  6. cocos creator游戏适配这事

    在想cocos适配之前,我们想想网页是怎么适配的.浏览器有各种规格,网页的一般做法是:背景图片铺满,网页内容保持在背景图片上居中,就实现了适应或者适配.css一般这样: .bg{ height:582 ...

  7. ES6 数组去重 方法用了filter或者 indexOf Array.from

  8. BZOJ 4561: [JLoi2016]圆的异或并 扫描线 + set

    看题解看了半天...... Code: #include<bits/stdc++.h> #define maxn 200010 #define ll long long using nam ...

  9. kvm virt-install 使用小结

    简介: virt-install 能够为KVM.Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装. 此外,它能够基于串行控制台.VNC或SDL支持文本或图 ...

  10. uva253 Cube painting(UVA - 253)

    题目大意 输入有三种颜色判断两个骰子是否相同 思路(借鉴) ①先用string输入那12个字符,然后for出两个骰子各自的字符串 ②这里用的算法是先找出第一个的三个面与第二个的六个面去比较,如果找到相 ...