转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html
 
一种是直接根据公式计算的,另外一种是二分算出来的。两种方法速度都很快,充分体会到二分的效率之高啊~~~
 
题目中一个很重要的条件就是 (Lx*Lx+Ly*Ly) < vD*vD < vB*vB ,
这样说明一定是可以追上的,而且可以以最大的距离射中,所以第一问的答案一定就是L的。
假设追击者跑的时间是 t1,那么肯定子弹飞行时间就是 L/vB 了
那么此时被追击者的位置就是 A(x1+(t1+L/vB)*Lx,y1+(t1+L/vB)*Ly )了
那么 点 (x2,y2) 到点A的距离等于 L+vD*t1  或者是 L-vD*t1  //两个方程
联立一个一元二次方程,很容易解出来。上面有两个方程,可以求得4个解。
那么选择其中最小的非负解就是答案了。
注意最后时间要加上  L/vB
 /*
HDU 4024
找数学公式计算
*/ #include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std; int main()
{
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
double x1,y1,x2,y2,Lx,Ly,vD,vB,L;
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&Lx,&Ly,&vD,&vB,&L))
{
if(x1==&&y1==&&x2==&&y2==&&Lx==&&Ly==&&vD==&&vB==&&L==)break;
double a=vD*vD-Lx*Lx-Ly*Ly;
double b=*L*vD-*Lx*(x1-x2+L*Lx/vB)-*Ly*(y1-y2+L*Ly/vB);
double c=L*L-(x1-x2+L*Lx/vB)*(x1-x2+L*Lx/vB)-(y1-y2+L*Ly/vB)*(y1-y2+L*Ly/vB); double s1=(-b-sqrt(b*b-*a*c))/(*a);
double s2=(-b+sqrt(b*b-*a*c))/(*a); b=-*L*vD-*Lx*(x1-x2+L*Lx/vB)-*Ly*(y1-y2+L*Ly/vB);
double s3=(-b-sqrt(b*b-*a*c))/(*a);
double s4=(-b+sqrt(b*b-*a*c))/(*a); printf("%.3lf ",L);
//从s1 s2 s3 s4当中选出一个最小的正数
if(s1<)s1=10000000000.0;
if(s2<)s2=10000000000.0;
if(s3<)s3=10000000000.0;
if(s4<)s4=10000000000.0;
printf("%.3lf\n",min(s1,min(s2,min(s3,s4)))+L/vB);//不要忘记加上L/vB
}
return ;
}
 /*
HDU 4024
二分
*/
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<algorithm>
using namespace std;
const double eps=1e-;//1e-6会WR
const double INF=1e9;
int main()
{
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
double x1,y1,x2,y2,Lx,Ly,vD,vB,L;
while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&Lx,&Ly,&vD,&vB,&L))
{
if(x1==&&y1==&&x2==&&y2==&&Lx==&&Ly==&&vD==&&vB==&&L==)break;
double l=;
double r=INF;
double mid;
double x,y;
while(l<r-eps)
{
mid=(l+r)/;
x=x1+mid*Lx;
y=y1+mid*Ly;
double d=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));//两点距离
double d1=vD*(mid-L/vB);//勇士跑的最大距离
if(d<=L)//在圆里面  平行关系
{
if(d+d1<=L)l=mid;//到不了圆周上
else r=mid;
}
else
{
if(L+d1<=d)l=mid;//到不了圆周上
else r=mid;
}
}
printf("%.3lf %.3lf\n",L,mid);
}
return ;
}

hdu 4024 二分的更多相关文章

  1. hdu 1669(二分+多重匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...

  2. HDU 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  3. hdu 4004 (二分加贪心) 青蛙过河

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...

  4. hdu 5046 二分+DLX模板

    http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...

  5. HDU 5699 二分+线性约束

    http://acm.hdu.edu.cn/showproblem.php?pid=5699 此题满足二分性质,关键在于如何判断当前的时间值可以满足所有的运送方案中的最长的时间. 对于每一次枚举出的k ...

  6. hdu 3277(二分+最大流+拆点+离线处理+模板问题...)

    Marriage Match III Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  8. hdu 1816(二分+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1816 思路:首先将每把钥匙i拆成两个点i和i+2n,分别表示选与不选,对于被分成n对的钥匙,由于只能选 ...

  9. hdu 1815(二分+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1815 题意:给出n个牛棚.两个特殊点S1,S2的坐标.S1.S2直连.牛棚只能连S1或S2,还有,某些 ...

随机推荐

  1. squid 学习笔记

    Squid学习笔记 1.安装前的配置 编译安装之前需要校正的参数主要包括File Descriptor和Mbuf Clusters. 1.File Descriptor 查看文件描述符的限制数目: u ...

  2. Strust的基础情况

    Struts的优点: 1.实现MVC模式,结构清晰 2.丰富的标签(tag) 3.通过配置文件页面导航,便于后期维护 4.与Servlet API松耦合,便于测试 Structs2=Structs1的 ...

  3. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

  4. artEditor增加h5拍照上传图片

    摘要: artEditor富文本 编辑器增加了图片拍照功能,点击图片按钮你可以从手机相册选择图片,也可以通过相机拍照上传. 项目地址:https://github.com/baixuexiyang/a ...

  5. CSS包含块containing block详解

    “包含块(containing block)”,W3c中一个很重要的概念,今天带大家一起来好好研究下. 初步理解 在 CSS2.1 中,很多框的定位和尺寸的计算,都取决于一个矩形的边界,这个矩形,被称 ...

  6. 淘宝(阿里百川)手机客户端开发日记第五篇 SharedPreferences使用详解

    我们知道,Android中数据存储技术由于如下几种 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 ...

  7. JdbcTemplate三种常用回调方法

    JdbcTemplate针对数据查询提供了多个重载的模板方法,你可以根据需要选用不同的模板方法. 如果你的查询很简单,仅仅是传入相应SQL或者相关参数,然后取得一个单一的结果,那么你可以选择如下一组便 ...

  8. BestCoder Round #60 1001

    Problem Description You are given a sequence of NNN integers. You should choose some numbers(at leas ...

  9. poj1094

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 29539   Accepted: 10 ...

  10. MySQL之扩展(触发器,存储过程等)

    视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SEL ...