专栏文章

题解:UVA10794 The Deadly Olympic Returns!!!

UVA10794题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqh5uj5
此快照首次捕获于
2025/12/04 04:43
3 个月前
此快照最后确认于
2025/12/04 04:43
3 个月前
查看原文

解题思路

首先读取测试用例的数量 T。

对于每个测试用例:

  • 读取时间 time。
  • 读取第一个导弹的起始位置 (x1, y1, z1) 和经过 time 秒后的位置 (x2, y2, z2),通过计算 (x2 - x1) / time、(y2 - y1) / time、(z2 - z1) / time 得到第一个导弹的速度向量 (vx1, vy1, vz1)。
  • 同样地,读取第二个导弹的相关信息并计算其速度向量 (vx2, vy2, vz2)。
  • 根据两个导弹的运动方程,设相遇时间为 t,列出关于 t 的二次方程 a * t2t^2 + b * t + c = 0,
  • 其中:

    aa = vx1 * vx1 + vy1 * vy1 + vz1 * vz1 + vx2 * vx2 + vy2 * vy2 + vz2 * vz2。

    bb = 2 * (vx1 * (x1 - x2) + vy1 * (y1 - y2) + vz1 * (z1 - z2) + vx2 * (x2 - x1) + vy2 * (y2 - y1) + vz2 * (z2 - z1))。

    cc = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2)。

  • 求解二次方程得到相遇时间 t,如果判别式小于 0,则说明没有相遇点(这里设 t 为 0,
  • 根据相遇时间 t 计算两个导弹的相遇点坐标 (meetX1, meetY1, meetZ1) 和 (meetX2, meetY2, meetZ2)。

最后

  • 计算并输出两个相遇点之间的距离,保留四位小数。 通过以上步骤,程序可以计算出两个导弹在运动过程中的最小可能距离,并按照要求的格式输出结果。

部分代码

CPP
// 计算两点之间的距离
double distance(double x1, double y1, double z1, double x2, double y2, double z2) {
    return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) + (z1 - z2) * (z1 - z2));
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...