博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codeforces 700A As Fast As Possible 二分求和?我觉得直接解更好
阅读量:7029 次
发布时间:2019-06-28

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

分析:一辆车最多载k个人,车的速度肯定比人快,所以想要到达时间最短,那么每个人必须做一次公交车。那么把n个人分成p=(n+k-1)/k组。设最短时间为t,每人乘车时间为t1,则t1*v2+(t-t1)*v1=L。设每次车子返回走的时间为t2,则(t1+t2)*v1+t2*v2=t1*v2。由这两个式子可以写出t1,t2的表达式。又因为p*t1+(p-1)*t2=t. 所以可以以最短时间L/v2为左端值,以L/v1为右端值二分t。  

#include 
#include
#include
#include
using namespace std;int n,k;double l,v1,v2;int solve(double t,int p){ double t1=(l-t*v1)/(v2-v1); double t2=(v2-v1)*t1/(v1+v2); double ans=t1*p+t2*(p-1); if(ans
0.000001) { int ret=solve(mid,p); if(ret==1) high=mid; else low=mid; mid=(low+high)/2;//这个地方竟然坑了我一把,如果把这一行放置while循环的第一个语句,结果wa了。。。 } printf("%.10lf\n",mid); return 0;}

但是,为什么要用二分呢,就是因为cf上面有二分这个标签嘛?明摆着t=p*t1+(p-1)*t2. 所以可以直接求解啊!

#include 
#include
int main(){ int n,k; double v1,v2,l; scanf("%d%lf%lf%lf%d",&n,&l,&v1,&v2,&k); int p=(n+k-1)/k; double a=l*p/(v2-v1)+l*(p-1)/(v1+v2); double b=v1*p/(v2-v1)+v1*(p-1)/(v1+v2)+1; printf("%.10lf\n",a/b); return 0;}

 

转载于:https://www.cnblogs.com/pach/p/6142571.html

你可能感兴趣的文章
ios 多线程 面试
查看>>
[Papers]NSE, $u_3$, Lebesgue space [Cao-Titi, IUMJ, 2008]
查看>>
顺序队列实现任务以此执行-任务调度系列2
查看>>
PHP JSON 数据解析代码
查看>>
Android 启动APP黑屏解决方案
查看>>
windows 2003 远程登录时如何修改管理员密码
查看>>
sql server 2008 评估期已过期解决办法
查看>>
2015第8周三马年除夕
查看>>
UI的重用性
查看>>
What is Split Brain in Oracle Clusterware and Real Application Cluster (文档 ID 1425586.1)
查看>>
php SimpleXML
查看>>
CLR C++ Set Word CustomDocumentProperties
查看>>
会员数据挖掘
查看>>
13、java中8中基本类型
查看>>
纯css3制作写轮眼开眼及进化过程
查看>>
CSS布局框架 960GS 表单排版示例
查看>>
OSX终端 命令行的一些基本操作
查看>>
《一句顶一万句》—— 读后总结
查看>>
判断Set里的元素是否重复、==、equals、hashCode方法研究-代码演示
查看>>
rem设置网页字体大小
查看>>