HDU 5761 友谊的小船 (多校)
题意:
一人刚开始在(0,a)点,水速是v2(方向是x轴),船速是v1(方向任意),问到达(0,0)的最少时间?
分析:
这题当时队友过的,贴一下官方题解。
首先这个题微分方程强解显然是可以的,但是可以发现如果设参比较巧妙就能得到很方便的做法。
先分解v1,
设船到原点的距离是r,容易列出方程
dtdr=v2cosθ−v1
dtdx=v2−v1cosθ
上下界都是清晰的,定积分一下:
0−a=v2∫0Tcosθdt−v1T
0−0=v2T−v1∫0Tcosθdt
直接把第一个式子代到第二个里面
v2T=v2v1(−a+v1T)
T=v12−v22v1a
这样就很Simple地解完了,到达不了的情况就是v1<v2(或者a>0且v1=v2)。
#include<bits/stdc++.h> using namespace std; int main() { int a,v1,v2; while(~scanf("%d%d%d",&a,&v1,&v2)){ int x=a*v1; int y=v1*v1-v2*v2; if(a==0)puts("0"); else if(y<=0)printf("Infinity\n"); else printf("%.10lf\n",x*1.0/y); } return 0; }