POJ 2610 Dog & Gopher(水~)

Description
一只地鼠想沿直线跑到位于点(x2,y2)的一个坑中,但是在(x1,y1)有一条狗想吃它,狗的速度是地鼠速度的两倍,如果狗比地鼠提前或者同时到达(x2,y2),地鼠就会被狗吃了,地鼠可以选一些坑作为起点,问地鼠能否成功逃脱,如果可以,输出离(x2,y2)最近的坑,如果最近距离有多个则输出首先输入的坑
Input
第一行为四个浮点数分别表示x1,y1,x2,y2,即狗的初始位置和地鼠的目标位置,之后输入多行,每行两个浮点数表示一个地鼠可以选择的初始坑,以文件尾结束输入
Output
如果地鼠从任何一个坑出发都会被狗吃掉则输出The gopher cannot escape.如果地鼠能够成功逃脱,则输出The gopher can escape through the hole at (x,y).(其中(x,y)为离(x2,y2)最近的坑,如果最近距离有多个则输出先输入的坑)
Sample Input
1.000 1.000 2.000 2.000
1.500 1.500
Sample Output
The gopher cannot escape.
Solution
简单题
Code

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
#define INF 0x3f3f3f3f
int main()
{
    double x1,y1,x2,y2,x3,y3;
    scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
    double ans=INF,ansx,ansy,flag=0;
    while(~scanf("%lf%lf",&x3,&y3))
    {
        double d1=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
        double d2=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
        if(d1<d2/2)
        {
            flag=1;
            if(ans>d1)ans=d1,ansx=x3,ansy=y3;
        }
    }
    if(flag)printf("The gopher can escape through the hole at (%.3lf,%.3lf).\n",ansx,ansy);
    else printf("The gopher cannot escape.\n");
    return 0;
}

你可能感兴趣的:(POJ 2610 Dog & Gopher(水~))