转自: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. 织梦dedecms调用子栏目的方法

    织梦调用子栏目名称在栏目.文章页及首页的方法是有区别的.首页的调用方法和在栏目的调用基本是一样的,如下: {dede:channel typeid=''} <li><h3>&l ...

  2. centos安装gitlab

    原文链接: http://www.centoscn.com/image-text/install/2015/0320/4929.html http://www.01happy.com/centos-6 ...

  3. .net 的一个分词系统(jieba中文分词的.NET版本:jieba.NET)

    简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...

  4. 神秘代码让iPhone微信闪退的解决方法

    14号晚,很多人的微信朋友圈中出现了这样几句话“听说苹果手机点全文就会闪退”,下方有好几行空白,需要点击“全文”才能看到,但是一旦你是在iPhone手机微信上点击“原文”后就直接闪退了,而用Andro ...

  5. quick-cocos2d-x学习笔记—定时器

    定时器用的地方还是比较多的,游戏中的逻辑判断很多都是采用每帧执行.quick对于schedule的封装在scheduler这个lua文件中.如果是第一次接触quick的话,可能按照官方的api来写一个 ...

  6. TCPIP,Http,Socket的区别

    网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可 ...

  7. axis2 webservice 发布、调用与项目集成

    发布 1.在apache官网下载axis2包,下载Binary Distribution和War Distribution两个zip. 2.将war放入tomcat webapps下部署.并输入 ht ...

  8. HDU 1285 拓普排序 基本模板例题 确定比赛名次

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  9. puppet 安装

    yum源配置 1. wget http://ftp.kaist.ac.kr/fedora//epel/6/i386/epel-release-6-8.noarch.rpm 2. yum list | ...

  10. Linux init进程详解

    init模块 一般来说,Linux程序只能用另一个Linux程序启动.例如,登录Linux终端程序Mingetty. 但终端程序又由谁启动呢?在计算机上启动Linux时,内核装入并启动init程序. ...