这个题直接推公式就可以。
就是解一元二次方程,用高中学的公式,函数开口向上,求最大值为(4ac-b*b)/4a。
这个题推出来一元二次方程,然后将最大值的公式化简一下。公式很好推。
这个题有疑问,int vx=v11-v1,vy=v22-v2;这样写是对的,反过来写成v1-v11,v2-v22就不对,WA1,但是样例什么的是对的,搞不懂为什么。
代码:
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<math.h> 5 #include<algorithm> 6 using namespace std; 7 int main(){ 8 int x1,y1,x2,y2; 9 int v1,v2,v11,v22; 10 double ans; 11 while(cin>>x1>>y1>>x2>>y2){ 12 cin>>v1>>v2>>v11>>v22; 13 int vx=v11-v1,vy=v22-v2; 14 if((y1-y2)*vy+(x1-x2)*vx<0||(vx==0&&vy==0))ans=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 15 else ans=fabs(((x1-x2)*vy-(y1-y2)*vx)/sqrt(vx*vx+vy*vy)); 16 printf("%.15f\n",ans); 17 } 18 return 0; 19 }