Codeforces Gym100971 F.Two Points (IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13)

 

这个题直接推公式就可以。

就是解一元二次方程,用高中学的公式,函数开口向上,求最大值为(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 }

 

posted @ 2018-01-15 20:58  ZERO-  阅读(230)  评论(0编辑  收藏  举报