Rower Bo
题目链接
题目大意
现在坐标系上有一条小船,在(0,a),现在这条小船从该点驶向原点,小船的速度为v1,水流的速度为v2;小船的速度方向始终指向原点,水流的方向始终为x轴正方向,问多少时间后小船才能达到原点。
题解
积分
一开始我蠢蠢的以为直接分解速度就行了…后来发现答案跟样例不一样,还看了好半天。
发现是速度方向始终指向原点后,明显是一个积分,如果在x和y方向分别积分的话,得到的结果里面有
sin
也有
cos
,不方便计算。对于这种情况,我们换一个思路,不分解v1分解v2,在斜方向上对速度积分,得到这样一个式子:
∫T0(v1−cosθ⋅v2) dt=a
可以看到在这样一个式子里,我们只有 cosθ ,于是我们把这个式子和前面在x轴方向上积分的式子
∫T0(v2−cosθ⋅v1) dt=0
联立,消去 cosθ 就行了。
最终得到
T=v1av21−v22
代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int a,v1,v2;
int main()
{
while(scanf("%d%d%d",&a,&v1,&v2)!=EOF)
{
if (a==0) { printf("0\n"); continue ; }
if (v1<=v2)
{
printf("Infinity\n");
continue ;
}
double t= 1.0*a*v1/(v1*v1-v2*v2);
printf("%lf\n",t);
}
return 0;
}