【题目】http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1251
【题意】求最短可逃跑路线
【算法】简单几何
【题解】地鼠跑的路程*2<狗狗跑的路程的最优解
【注意】这是水题
【AC代码】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct point{
double x,y;
}a,b,p[1000];
double d(point p1,point p2){
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
}
int main(){
int n,i,t;
while(scanf("%d",&n)!=EOF){
//printf("%d\n",n);
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
//printf("%.2f %.2f %.2f %.2f\n",a.x,a.y,b.x,b.y);
for(i=0;i<n;i++)scanf("%lf%lf",&p[i].x,&p[i].y);
t=-1;
for(i=0;i<n;i++)if(2*d(a,p[i])<=d(b,p[i])&&(t==-1||d(a,p[t])>d(a,p[i]))) t=i;
if(t==-1)printf("The gopher cannot escape.\n");
else printf("The gopher can escape through the hole at (%.3f,%.3f).\n",p[t].x,p[t].y);
}
return 0;
}
【心得】这是开始几何的第一题么