http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2086

很明显的一个二分题目。因为要求精度颇高,所以需要认真的计算。

比如我们看这3组数据——

1 1 100 1000 1000 0 0 10000

1 1 100 1 1 1000 1000 10000

1 1 100 1 1 0 0 10000

答案是——(在精度误差范围内)

500000.0000000000

500400000.00000000000000

500000.00000000000

标程的解法是二分相遇的时间,假设为 RunTime 这样就能够计算出DS和xiaodao奔跑的时间Run1,Run2。这样就能计算出来两个人奔跑的距离和 RunLength = Run1 * v1 + Run2 * v2. 与 L 进行比较,最终确定奔跑时间RunTime。由于xiaodao一直在奔跑,于是最终的答案就是 RunTime * v.

接下来就是细节问题,我们看最大的数据 RunTime 要将近1e9 的数量级,而我们要求精度误差是 1e-5.于是RunTime的上界设置为1e9,因为我们的答案是 RunTime * v 所以精度eps最大为 1e-8 , 经过测试 1e-10、1e-9也是可以的。

这个题目主要就在考验大家对于精度的计算问题,想清楚了比较简单。有些人直接二分答案,我不认为是个好方法。譬如二分xiaodao奔跑的距离 ans , 那么ans / v 的时候就会丧失很多精度,有可能会造成wa。

奔跑的xiaodao
Time Limit: 4000 MS Memory Limit: 65536 K
Total Submit: 149(17 users) Total Accepted: 47(11 users) Rating: Special Judge: Yes
Description

某天,DS同学和他的妹子终于要见面了。DS在遥远的西藏,妹子在北京,中间隔着一条长长的川藏公路。DS和妹子都在这条公路上相向而行,因为过于思念对方,DS派出了xiaodao作为自己的情书信使。

DS和妹子相向而行,速度为 v1 , v2 m/s。 尽职尽责的xiaodao同学以 v m/s 的速度奔跑,他一开始拿着DS的信向妹子的方向狂奔,遇到妹子之后毫不停歇,拿着妹子的书信继续以 v 的速度向DS奔跑,周而复始,一直到DS和妹子相遇为止。好辛劳的xiaodao。

但是DS是个胖子,妹子是女生,大家都体力不太行。已知DS奔跑 T1 s 之后就要休息 Wait1 s ,妹子奔跑 T2 s 之后就要休息 Wait2 s 。而xiaodao是不会休息的!经过计算,DS和妹子的初始距离为 L 。

xiaodao想问你,当DS和妹子终于相遇的时候,xiaodao这时候已经奔跑了多少 m 的距离。

Input

第一行一个整数 T , 代表数据组数,以下 T 组数据。

每组数据包含 8 个实数 分别代表 v1 , v2 , v , T1 , T2 , Wait1 , Wait2 , L。

1 <= v1 , v2 <= 100 , v1 < v <= 100 , 1 <= T1 , T2 <= 1000 , 0 <= Wait1 , Wait2 <= 1000 . 1 <= L <= 10000 .

Output

对于每组数据输出一个实数 S 代表 xiaodao 奔跑的距离。
如果标程给出的答案是 Ans ,只要 | Ans - S | < 1e-5 你就会得到 Accepted。

Sample Input
1
1.00 1.00 2.00 1.00 1.00 0.00 0.00 2.00
Sample Output
2.000000000
#include<iostream>
#include<math.h>
#include<cmath>
#include<stdio.h>
using namespace std;
double v1,v2,v,t1,t2,w1,w2;
long long T;
double l,r,mid,ans,len;
double minn(double aa,double bb)
{
if (aa>bb)return bb;
else return aa;
}
void judge(){//为什么还要判断一下是否减去最短的休息时间。
double r1,r2,dds,dmz,time1,time2;
dds=0.00;dmz=0.00;
r1=floor(mid/(t1+w1));
r2=floor(mid/(t2+w2));
dds=r1*t1*v1;dmz=r2*t2*v2;
if (abs(len-dds-dmz)<1e-9){
mid-=minn(w1,w2);//为什么减去最短的
return;
}
return ;
}
bool ok (double time)
{
double r1,r2,dds,dmz,time1,time2;
dds=0.00;dmz=0.00;
r1=floor(time/(t1+w1));
r2=floor(time/(t2+w2));
dds=r1*t1*v1;dmz=r2*t2*v2;
time1=time-r1*(t1+w1);
time2=time-r2*(t2+w2);
time1=minn(time1,t1);time2=minn(time2,t2);
dds+=time1*v1;dmz+=time2*v2;
if (dds+dmz>len) return true;
return false;
}
int main()
{
cin>>T;
double ds1,ds2,mz1,mz2;
while (T--){
l=0.00;
r=10000000000.00;
cin>>v1>>v2>>v>>t1>>t2>>w1>>w2>>len;
while (r-l>1e-9)
{
mid=(l+r)*0.5;
if (ok(mid)) r=mid;
else l=mid;
}
judge();
ans=mid*v;
printf("%.8lf\n",ans);
}
return 0;
}

  

奔跑的xiaodao的更多相关文章

  1. JS+CSS3人物奔跑动画

    查看效果:http://hovertree.com/texiao/jquery/58/ 效果图: 代码: <!DOCTYPE html> <html> <head> ...

  2. css3动画之小牛奔跑

    今天突然看到阿里云官网的一个悬浮效果挺炫的,就想知道到底是怎么做的,研究了半天,加了一个技术群,原来是css3做的,然后做了一个小 Demo记录下来: <!DOCTYPE html> &l ...

  3. 奔跑在Docker上的Spark

    转自:马踏飞燕--奔跑在Docker上的Spark 目录 为什么要在Docker上搭建Spark集群 网络拓扑 Docker安装及配置 ssh安装及配置 基础环境安装 Zookeeper安装及配置 H ...

  4. Unity3D无限奔跑者Playmaker v1.5

    这款功能丰富的移动准备包内含使您自己的各种各样的3D游戏运行的一切要素.无需编程! 功能 1 - 响应式滑动控制2 - 投掷炮弹3 - 可破坏物体4 - 能力提升道具- 金币磁铁- 护盾- 继续密钥- ...

  5. 奔跑吧Linux

    刚拿到MiZ702,就被他的"外貌"深深的吸引,核心板加底板的形式让她看上去,强大而神秘-- 华丽的外表之下是否有着与之相当的内含呢,我们拿Linux将其检验一番! 板载的TF卡里 ...

  6. 大年三十。让字母在屏幕上奔跑:(sleep , system"clear")

    system "clear",ruby清屏(osk系统上,window上用system "cls"). https://stackoverflow.com/qu ...

  7. 奔跑吧DKY——团队Scrum冲刺阶段-Day 4

    今日完成任务 谭鑫:主要解决之前存在的控件不灵敏问题,导致界面跳转不顺利. 黄宇塘:制作新的游戏背景图,对主界面图进行调整. 赵晓海:主要解决之前存在的控件不灵敏问题,导致界面跳转不顺利. 方艺雯:制 ...

  8. 奔跑吧DKY——团队Scrum冲刺阶段博客汇总

    第一周:团队展示 团队选题 需求规格说明书 第二周:完善需求规格说明书.制定团队编码规范.通过团队项目数据库设计 奔跑吧DKY--团队Scrum冲刺阶段-Day 1-领航 奔跑吧DKY--团队Scru ...

  9. Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果)

    Android动画之仿美团加载数据等待时,小人奔跑进度动画对话框(附顺丰快递员奔跑效果) 首句依然是那句老话,你懂得! finddreams :(http://blog.csdn.net/finddr ...

随机推荐

  1. JQuery的$命名冲突详细解析

    在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg')的写法.然而,当我们引入多个js库后,在另外一个js库中 ...

  2. C# 内存管理优化畅想(三)---- 其他方法&结语

    前两篇文章提出的优化方法,都是不需要修改源代码的,而是在CLR或JIT层面进行自动优化的.但本文中提出的优化方法则需要引入新的语法,开发者只有在源代码中使用了这些新语法,才会获得优化. 1. 允许对象 ...

  3. Android常用组件【转】

    UI相关 图片 Android-Universal-Image-Loader:com.nostra13.universalimageloader:异步加载.缓存.显示图片 ImageLoader:co ...

  4. Uncaught SecurityError: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

    canvas绘制图片,由于浏览器的安全考虑,如果在使用canvas绘图的过程中,使用到了外域的图片资源,那么在toDataURL()时会抛出安全异常: Uncaught SecurityError: ...

  5. HashMap深度解析(二)

    本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/16890151 上一篇比较深入的分析了HashMap在put元素时的整体过 ...

  6. 创建 window service 定时任务

    参考文章:http://www.cnblogs.com/jack-liang/archive/2011/05/20/2051743.html 前段时间做过一个项目,前端系统提供添加定时任务,后端系统要 ...

  7. 可以打开mdb文件的小软件

    下载地址: http://dl-sh-ocn-1.pchome.net/09/rh/DatabaseBrowser.zip

  8. iOS中ARC内部原理

    ARC会自动插入retain和release语句.ARC编译器有两部分,分别是前端编译器和优化器. 1. 前端编译器 前端编译器会为“拥有的”每一个对象插入相应的release语句.如果对象的所有权修 ...

  9. 层模型--相对定位(position:relative)

    如果想为元素设置层模型中的相对定位,需要设置position:relative(表示相对定位),它通过left.right.top.bottom属性确定元素在正常文档流中的偏移位置.相对定位完成的过程 ...

  10. Objective-C的对象模型 http://foredoomed.org/blog/2014/02/24/object-modeling-of-objective-c/

    Objective-C是一门面向对象,并且在C的基础上加入了Smalltalk式的消息机制而形成的编程语言,它主要被苹果公司用于开发Mac OS X和iOS操作系统.既然Objective-C是面向对 ...