一、题目解释
本题就是给定大炮和目标的位置以及炮弹速度、风速和风向,求出打中目标的时间。
二、题意分析
由于需要考虑方向,我们不妨将右侧设为正,左侧设为负,即加上
1
2if (ct < cp) cbs *= -1;
if (wd == 'L') ws *= -1;此时我们就可以将炮弹速度和风速加在一起,作为实际速度进行计算,即
1
t = (ct - cp) / (cbs + ws)
特判
如果大炮和目标在同一点上,那么时间就是 0
都把自己炸死了还管什么时间,所以1
if (ct - cp == 0) cout << "0.000000";
- 按照上面的步骤进行计算时,我们会发现若炮弹速度加风速等于零,则计算时会出现除以零,所以
1
if (cbs + ws == 0) cout << "Impossible";
最后,我们加上保留小数输出即可(时间为负即不可能)
1
2if (t >= 0) cout << fixed << setprecision(6) << t;
else cout << "Impossible";
三、AC Code
在上面的分析过后,我们已经理清了思路,接下来代码就不难了。
最后放上 AC 代码(注释就不写了,上面的说明挺详细的了):
1 |
|