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(三分)
链接 这题还真没看出来长得像三分.. 三分角度,旋转点. 最初找到所有点中最左边.右边.上边.下边的点,正方形边长为上下距离和左右距离的最大值,如图样例中的四个点(蓝色的),初始正方形为红色的正方形. ...
随机推荐
- C#语言最基础的认识变量
变量是指一块存储数据的内存空间,并且该内存区域的数据内容可以发生变化. 变量是必须先声明后赋值. 基本的语法:数据类型+变量名: 变量名=数据: 简单的使用技巧:声明赋值简写 Static void ...
- Java—将文件压缩为zip文件
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...
- Less文件的建立
1.打开DreamWeaver 2.选择 新建 Less 文件名为.less,保存于Less文件夹中 3.声明文档头:@charset "utf-8"; 4.将Less ...
- C#通过SqlConnection连接查询更新等操作Sqlserver数据库
Sqlserver数据库连接方式有多种,这里只介绍最常用的通过SqlConnection和Sqlserver数据库用户名和密码验证来进行操作数据库. 数据库连接字符串: string connStri ...
- Floyd模板
比较简单的算法:但是当点太多需要剪枝,不然很耗时 void Floyd() { ;k<n;++k) ;i<n;++i) ;j<n;++j) dj[i][j] = min(dj[i][ ...
- java攻城师之路--复习java web之Cookie_Session
Servlet技术 用来动态生成 网页数据资源Servlet生成HTML 页面数据时,所有内容都是通过 response.getWriter response.getOutputStream 向浏览器 ...
- ubuntuKylin17.04重装KDE
不小心安装了一个不知道什么的东西,把libROS的那一套都给卸载了,然后删除掉了KDE的很多库.然后KDM也丢失了.KDE界面启动之后,plasma-desktop界面也启动不了.选择重装. 然而出现 ...
- .net core里用ZXing生成二维码
先获取Nuget包 static void Main(string[] args) { string content = "二维码信息"; BitMatrix byteMatrix ...
- 使用原生JS的AJAX读取json全过程
首先ajax(async javascript and xml)是用于前端与后端文件比如xml或者json之间的交互.他是一种异步加载技术,意味着你点击某个加载事件是再也不用刷新整个页面,而是发送局部 ...
- JavaFX桌面应用开发-Button(按钮)与事件
1:Button样式的操作原始代码: package application; import javafx.application.Application;import javafx.scene.Gr ...