Codeforces Gym100971 F.Two Points (IX Samara Regional Intercollegiate Programming Contest Russia, Sa...

 

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

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

 

转载于:https://www.cnblogs.com/ZERO-/p/9703038.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值