Gym - 101615E Straight Shot 物理(先求解在检验)

1.题意:机器人要过(东西)n条流向(南北)不同的河,每条河有自己的流速vi和宽度,机器人可以在起点选择一个方向(以后不可改变),速度 v不变,问能否在限制时间内准确到达目的地(x,0)

2.分析:

机器人要准确到达目的地要满足:

(1)到达(x,0)时,Y方向距离和为0

(2)到达时间<=2*x/v

所以:

假设已知vy,vx , 则竖直距离 = x/vx * vy + (w1/vx * vy1 + w2/vx * vy2 + ...... + wn/vx * vyn) = 0

则: 两边约去vx : x*vy  = -(x1*vy1 + x2*vy2 + ....... + wn*vyn)  = sum

则: vy = sum/x

则:vx = sqrt(v*v - vy*vy);

验证 time = x/vx <=2*x/v即可

3. 代码:

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 100 + 7;
int n,x;
double v,sum;
int main()
{
    sum = 0;
    scanf("%d%d%lf",&n,&x,&v);
    for(int i = 0;i<n;i++){
        int l,r;
        double vh;
        scanf("%d%d%lf",&l,&r,&vh);
        sum+=(l - r)*1.0*vh;
    }
    double  timer = 2*x*1.0/v;
    double vy = sum/x;
    double vx = sqrt(v*v - vy*vy);
    if(fabs(vy)>=v)printf("Too hard\n");
    else if(x*1.0/vx>timer)printf("Too hard\n");
    else printf("%.3lf\n",x*1.0/vx);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40772692/article/details/82493176