1 条题解
-
0
B. 线段 详细题解
题目重述
在平面上给定起点 和终点 。需要执行 次操作,第 次操作必须从当前位置移动到距离恰好为 的任意点(方向任意)。判断是否存在一种移动方案,使得 次操作后恰好到达终点 。
问题转化
设第 次移动的向量为 ,满足 ,最终的总位移为:
我们需要判断是否存在一组方向选择,使得 $\vec{R} = \overrightarrow{ST} = (q_x - p_x, q_y - p_y)$。
核心观察
一维情形的启发
在一维数轴上,每次移动距离固定为 ,方向可选正或负。最终位置为:
- 最大可能距离:
- 最小可能距离:设
- 若 ,则最小距离为
- 否则最小距离为
且可达位置与 具有相同的奇偶性。
二维情形的扩展
在二维平面上,由于方向可以在 范围内任意选择,自由度更高。第 步的向量可以表示为:
其中 为任意角度。
两个向量的情况
对于两个固定长度的向量 和 ,它们的合向量 的长度范围为:
并且这个区间是连续的(通过改变两向量夹角可以连续变化)。
多个向量的情况
将前 个向量的合向量视为一个新的向量,其模长可以在某个区间 内连续变化。再与第 个向量合成,根据三角不等式:
由于 和 之间是连续的,合成后的模长也可以连续变化。不断迭代,最终可达的模长集合是一个连续区间。
关键结论
设:
则经过 步后,从起点出发能到达的所有点构成的集合是:
- 圆心在起点,半径为 的圆盘(如果 )
- 半径为 的圆环(如果 )
即最小可达距离为:
最大可达距离为:
并且区间 内的所有距离都是可达的。
为什么没有奇偶性限制?
在一维中,每次改变方向只能改变 ,导致奇偶性限制。但在二维中,可以通过连续旋转向量来连续改变合向量的模长,因此区间是连续的,没有离散限制。
算法步骤
-
计算起点到终点的欧几里得距离:
-
计算步长总和:
-
计算最大步长:
-
计算最小可达距离:
$$d_{\min} = \begin{cases} 0, & \text{if } M \le S - M \\ 2M - S, & \text{if } M > S - M \end{cases}$$ -
判断是否可达:
其中 是一个很小的正数(如 ),用于处理浮点精度误差。
正确性证明
充分性
若 在区间 内,我们可以通过构造法证明可达:
- 当 时,可以通过调整使前 步的合向量与第 步反向,从而得到任意小于 的模长。
- 当 时,最大步长无法被完全抵消,最小模长就是 ,且通过调整夹角可以得到该区间内的任意值。
必要性
由三角不等式:
- 总位移长度不超过各步长度之和:
- 总位移长度不小于 (这是由三角形不等式多次应用得到的下界)
因此,若 不在 内,则一定不可达。
复杂度分析
- 时间复杂度: 每个测试用例
- 空间复杂度: 额外空间
- 总 不超过 ,完全可行
示例验证
示例1
- ,故
- ✅ 输出
Yes
示例3
- ,故
- ❌ 输出
No
注意事项
- 整数运算优先:计算 时使用
sqrt,但比较时注意精度 - 数据类型:使用
long long存储坐标差平方和,避免溢出 - 浮点精度:使用 容忍计算误差
- 特殊情况:当 时(,但题目保证 ,,所以 )
- 1
信息
- ID
- 7123
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者