SP26179 JC15A - Windy Cannon题解

· · 题解

SP26179 JC15A - Windy Cannon

题目传送门

题意

大致意思就是给定大炮,目标的位置以及炮弹的速度、风速和风向,求打中目标的时间(结果保留 6 位小数)。

分析

读题可得出,如果想要时间尽量短的话,我们直接将大炮向目标点的方向开, 这样可以充分利用他的初始速度。

众所周知,风向和开炮的方向只有同向和异向 2 种可能。我们设大炮与目标点间的距离为 s,炮弹的速度为 vd,风速为 vf,时间为 tim。没啥好说的了,看代码吧。

AC code

#include <bits/stdc++.h>
using namespace std;

double a, b, s, vd, vf, tim;
char wd;
int main()
{
    scanf("%lf%lf%lf%lf%c", &a, &b, &vd, &vf, &wd);
    if ((a > b && wd == 'R') || (a < b && wd == 'L'))//若方向不同,加上风速的相反数,就可和同向一起处理了。
        vf *= -1;
    s = abs(b - a);
    tim = s / (vd + vf);
    if (tim < 0)//若风速 > 炮弹的速度,时间会变成负数,此时输出 "Impossible" 即可。 
        cout << "Impossible" << endl;
    else//否则输出时间 
        cout << fixed << setprecision(6) << tim << endl;//保留 6 位小数 
    return 0;//结束运行 
}

本蒟蒻第三次写题解,管理大大求过