Tornado

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 196    Accepted Submission(s): 48

Problem Description
Professor Jonathan is a well-known Canadian physicist and meteorologist. People who know him well call him “Wind Chaser”. It is not only because of his outstanding tornado research which is the most influential in the academic community, but also because of his courageous act in collecting real data of tornados. Actually he has been leading his team chasing tornado by cars equipped with advanced instruments hundreds of times.

In summer, tornado often occurs in the place where Professor Jonathan lives. After several years of research, Wind Chaser found many formation rules and moving patterns of tornados. In the satellite image, a tornado is a circle with radius of several meters to several kilometers. And its center moves between two locations in a straight line, back and forth at a fixed speed. After observing a tornado’s movement, Wind Chaser will pick a highway, which is also a straight line, and chase the tornado along the highway at the maximum speed of his car.

The smallest distance between the Wind Chaser and the center of the tornado during the whole wind chasing process, is called “observation distance”. Observation distance is critical for the research activity. If it is too short, Wind Chaser may get killed; and if it is too far, Wind Chaser can’t observe the tornado well. After many times of risk on lives and upset miss, Wind Chaser turns to you, one of his most brilliant students, for help. The only thing he wants to know is the forthcoming wind chasing will be dangerous, successful or just a miss.

 
Input
Input contains multiple test cases. Each test case consists of three lines which are in the following format.

xw1 yw1 xw2 yw2 vw
xt1 yt1 xt2 yt2 vt
dl du

In the first line, (xw1, yw1) means the start position of Wind Chaser; (xw2, yw2) is another position in the highway which Wind Chaser will definitely pass through; and vw is the speed of the car. Wind chaser will drive to the end of the world along that infinite long highway.
In the second line, (xt1, yt1) is the start position of tornado; (xt2, yt2) is the turn-around position and vt is the tornado’s speed. In other words, the tornado’s center moves back and forth between (xt1, yt1) and (xt2, yt2) at speed vt .

The third line shows that if the observation distance is smaller than dl , it will be very dangerous; and if the observation distance is larger than du, it will be a miss; otherwise it will lead to a perfect observation.

All numbers in the input are floating numbers.

-2000000000 <= xw1, yw1, xw2, yw2, xt1, yt1, xt2, yt2 <= 2000000000
1 <= vw, vt <= 20000
0 <= dl, du <= 2000000

Note:
1.  It’s guaranteed that the observation distance won’t be very close to dl or du during the whole wind chasing process. There will be at least 10-5 of difference. 
2.  Wind Chaser and the tornado start to move at the same time from their start position.

 
Output
For each test case output one line contains one word “Dangerous”, “Perfect” or “Miss” which describes the prediction of the observation.
 
Sample Input
0 0 1 0 2
10 -5 12 7 4
1.3 2.7
0 0 1 0 2
10 -5 12 7 1
0.3 0.4
 
Sample Output
Dangerous
Perfect
 
Source
 
Recommend
gaojie   |   We have carefully selected several similar problems for you:  2490 2494 3254 2267 1755 
 

代码:

 #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
const int MAX= ;
const double esp = 1e-; struct Tnode
{
double x,y;
}w1,w2,t1,t2;
double vw,vt,dl,du;
double getmin(double a , double b)
{
return (a>b)?b:a;
}
//求点积
double dianji(Tnode &a ,Tnode &b ,Tnode &c)
{
return (b.x-a.x)*(c.x-a.x)+(b.y-a.y)*(c.y-a.y);
}
//求叉 积
double det(Tnode &a ,Tnode &b ,Tnode &c)
{
return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);
}
//求距离
double dis(Tnode &a,Tnode &b)
{
return sqrt(fabs((b.x-a.x)*(b.x-a.x)+(b.y-a.y)*(b.y-a.y)));
}
//求点o到线段的最近的距离
double getdistance(Tnode &o,Tnode a ,Tnode b,double dx,double dy)
{
a.x+=dx;
a.y+=dy;
b.x+=dx;
b.y+=dy;
double d =getmin(dis(o,a),dis(o,b));
double di=dis(a,b);
if(di<=esp) return dis(o,a);
if(dianji(a,o,b)>=-esp&&dianji(b,o,a)>=-esp)
return fabs(det(a,b,o))/di;
else
return getmin(dis(o,a),dis(o,b));
}
//求o到以线段ab为起始,(dx,dy)为间距的平行线段的最近距离
double calc(Tnode &o ,Tnode &a ,Tnode &b , double dx, double dy)
{
Tnode a1,b1;
int ll=,rr=MAX;
while(ll<rr)
{
int mid=(ll+rr)/;
double d1=getdistance(o,a,b,dx*mid,dy*mid);
double d2=getdistance(o,a,b,dx*(mid+),dy*(mid+));
if(d1<=d2+esp) rr=mid;
else ll=mid+;
}
return getdistance(o,a,b,dx*ll,dy*ll);
}
void work()
{
Tnode wdr ,tdr,move,a1,b1,a2,b2;
double distance,time,d,d1,d2;
distance=dis(w1,w2);
wdr.x = (w2.x-w1.x)*vw/distance;
wdr.y = (w2.y-w1.y)*vw/distance;
distance = dis(t1,t2);
time = distance/vt;
tdr.x = (t2.x-t1.x)*vt/distance;
tdr.y=(t2.y-t1.y)*vt/distance;
move.x=(-wdr.x+tdr.x)*time;
move.y=(-wdr.y+tdr.y)*time;
//求两个线段簇的第一条线段a1-b1和a2-b2
a1=t1;
b1.x=a1.x+move.x;
b1.y=a1.y+move.y;
move.x=(-wdr.x-tdr.x)*time;
move.y=(-wdr.y-tdr.y)*time;
a2=b1;
b2.x=a2.x+move.x;
b2.y=a2.y+move.y;
//分别求点w1到两个线段簇的最近距离d1和d3
d1=calc(w1,a1,b1,b2.x-a1.x,b2.y-a1.y);
d2=calc(w1,a2,b2,b2.x-a1.x,b2.y-a1.y);
//判断结果
d=getmin(d1,d2);
if(d+esp<d1) printf("Dangerous\n");
else if(d-esp>du) printf("Miss\n");
else printf("Perfect\n");
}
int main()
{
while(scanf("%lf",&w1.x)!=EOF)
{
scanf("%lf%lf%lf%lf",&w1.y,&w2.x,&w2.y,&vw);
scanf("%lf%lf%lf%lf%lf",&t1.x,&t1.y,&t2.x,&t2.y,&vt);
scanf("%lf%lf",&dl,&du);
work();
}
return ;
}

hdu------2488Tornado(几何)的更多相关文章

  1. hdu 5430(几何)

    题意:求光在圆内反射n次后第一次返回原点的方案数 如果k和n-1可约分,则表明是循环多次反射方案才返回原点. #include <iostream> #include <cstrin ...

  2. hdu 1577 WisKey的眼神 (数学几何)

    WisKey的眼神 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  3. POJ 3831 &amp; HDU 3264 Open-air shopping malls(几何)

    题目链接: POJ:id=3831" target="_blank">http://poj.org/problem?id=3831 HDU:http://acm.h ...

  4. HDU 1700 Points on Cycle (几何 向量旋转)

    http://acm.hdu.edu.cn/showproblem.php?pid=1700 题目大意: 二维平面,一个圆的圆心在原点上.给定圆上的一点A,求另外两点B,C,B.C在圆上,并且三角形A ...

  5. HDU 1432 Lining Up(几何)

    http://acm.hdu.edu.cn/showproblem.php?pid=1432 题目大意: 2维平面上给定n个点,求一条直线能够穿过点数最多是多少. 解题思路: 因为题目给定的n(1~7 ...

  6. HDU 1392 Surround the Trees(几何 凸包模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1392 题目大意: 二维平面给定n个点,用一条最短的绳子将所有的点都围在里面,求绳子的长度. 解题思路: 凸包的模 ...

  7. hdu 5839(三维几何)

    Special Tetrahedron Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. hdu 1115 Lifting the Stone (数学几何)

    Lifting the Stone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  9. hdu 1086 You can Solve a Geometry Problem too (几何)

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3 ...

  10. HDU 5128.The E-pang Palace-计算几何

    The E-pang Palace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 512000/512000 K (Java/Othe ...

随机推荐

  1. 【原创】OPA857 TEST模式使用

    opa857 test mode: 配置opa857工作与test模式,设置tsst_sd为高电平连接到+Vs,test_in脚需要输入DC偏置以正确配置test模式.所需要增加的直流偏置大小因供电电 ...

  2. Oracle同义词学习

    oracle的同义词总结   从字面上理解就是别名的意思,和视图的功能类似.就是一种映射关系.   同义词拥有如下好处:   节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;   扩展的数 ...

  3. 访问者模式,visitor

    定义: 表示作用于某对象结构中的各个元素的操作. 可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 前提: 适用于数据结构(Element)相对稳定的系统,这样visitor中的方法就是稳定 ...

  4. Codeforces Round #250 (Div. 2)A(英语学习)

    链接:http://codeforces.com/contest/437/problem/A A. The Child and Homework time limit per test 1 secon ...

  5. Installing Python 3.5.2 from source

    Here are the procedures we are to follow, Download the source code of an official Python release. Co ...

  6. STORM_0008_Structure-of-the-codebase_Storm的代码库的结构

    http://storm.apache.org/releases/1.0.1/Structure-of-the-codebase.html Structure of the codebase 源码分成 ...

  7. 将图片转成base64 小工具

    工作需要使用,所以就做了一个小工具,方便使用 推荐使用 chrome,ff . 毕竟是个小工具方便自己使用而已,所以没有做浏览器兼容测试了! 代码如下,直接保存为 .html 打开即可 <!DO ...

  8. centos中更换jdk的版本

    现在讲的是Linux中更换jdk版本的问题,卸载Linux自带的jdk更换sun的jdk百度一大堆,但是如果我安装的sun的jdk是1.7的想更换到1.8的如何解决呢,方法其实超easy. 把1.8的 ...

  9. Web Service 接口实现大量数据传输的解决方案

    1,流程图 2,流程说明:线程1开始请求接口获取1W条数据,当数据成功获取后,接口是闲置的,这时我们开始线程2获取数据,同时线程1继续执行获取数据的后续工作,如果转换数据,这里我用的办法是,使用预先定 ...

  10. mysql概要(十五)存储过程

    1.定义: 2.查看所有存储过程: show procedure status; 3.创建存储过程: create procedure 存储过程名字(参数) begin s1l语句; end$     ...