转自: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. java中获取路径中的空格处理(%20)问题

    在java中获取文件路径的时候,有时候会获取到空格,但是在中文编码环境下,空格会变成“%20”从而使得路径错误. 解决办法: String path = Parameter.class.getReso ...

  2. Repository

    namespace MyRepository.Domain.Infrastructure { public class Repository<TEntity> : IRepository& ...

  3. SQL防注入程序 v1.0

    /// ***************C#版SQL防注入程序 v1.0************ /// *使用方法: /// 一.整站防注入(推荐) /// 在Global.asax.cs中查找App ...

  4. Dedecms v5.7 最新注入分析

    该漏洞是cyg07在乌云提交的, 漏洞文件: plus\feedback.php.存在问题的代码: view source 01 ... 02 if($comtype == 'comments') 0 ...

  5. c语言 函数传输传递的三种方式(值、指针、引用)

    本文摘自<彻底搞定c指针> 一.三道考题开讲之前,我先请你做三道题目.(嘿嘿,得先把你的头脑搞昏才行……唉呀,谁扔我鸡蛋?)考题一,程序代码如下:void Exchg1(int x, in ...

  6. Java-Java中System.arraycopy() 和 Arrays.copyOf()两者之间的区别

    如果我们想拷贝一个数组,我们可能会使用System.arraycopy()或者Arrays.copyof()两种方式.在这里,我们将使用一个比较简单的示例来阐述两者之间的区别. 1.示例代码: Sys ...

  7. Dual Palindromes

    Dual PalindromesMario Cruz (Colombia) & Hugo Rickeboer (Argentina) A number that reads the same ...

  8. cocos基础教程(5)数据结构介绍之cocos2d::Vector

    cocos2d::Vector cocos2d::Vector<T>是一个封装好的能动态增长顺序访问的容器.cocos2d::Vector<T>中的元素是按序存取的,它的低层实 ...

  9. Mysql limit offset

    Mysql limit offset 假设数据库表student存在13条数据. 语句1:select * from student limit 9,4 语句2:slect * from studen ...

  10. [UOJ#131][BZOJ4199][NOI2015]品酒大会 后缀数组 + 并查集

    [UOJ#131][BZOJ4199][NOI2015]品酒大会 试题描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个 ...