1 条题解

  • 0
    @ 2026-5-16 16:17:18

    B. 线段 详细题解

    题目重述

    在平面上给定起点 S(px,py)S(p_x, p_y) 和终点 T(qx,qy)T(q_x, q_y)。需要执行 nn 次操作,第 ii 次操作必须从当前位置移动到距离恰好为 aia_i 的任意点(方向任意)。判断是否存在一种移动方案,使得 nn 次操作后恰好到达终点 TT

    问题转化

    设第 ii 次移动的向量为 vi\vec{v_i},满足 vi=ai|\vec{v_i}| = a_i,最终的总位移为:

    R=i=1nvi\vec{R} = \sum_{i=1}^n \vec{v_i}

    我们需要判断是否存在一组方向选择,使得 $\vec{R} = \overrightarrow{ST} = (q_x - p_x, q_y - p_y)$。

    核心观察

    一维情形的启发

    在一维数轴上,每次移动距离固定为 aia_i,方向可选正或负。最终位置为:

    i=1n±ai\sum_{i=1}^n \pm a_i
    • 最大可能距离:S=i=1naiS = \sum_{i=1}^n a_i
    • 最小可能距离:设 M=max(a1,a2,,an)M = \max(a_1, a_2, \dots, a_n)
      • MSMM \le S - M,则最小距离为 00
      • 否则最小距离为 M(SM)=2MSM - (S - M) = 2M - S

    且可达位置与 SS 具有相同的奇偶性。

    二维情形的扩展

    在二维平面上,由于方向可以在 360360^\circ 范围内任意选择,自由度更高。第 ii 步的向量可以表示为:

    vi=ai(cosθi,sinθi)\vec{v_i} = a_i(\cos\theta_i, \sin\theta_i)

    其中 θi\theta_i 为任意角度。

    两个向量的情况

    对于两个固定长度的向量 v1\vec{v_1}v2\vec{v_2},它们的合向量 R=v1+v2\vec{R} = \vec{v_1} + \vec{v_2} 的长度范围为:

    a1a2Ra1+a2|a_1 - a_2| \le |\vec{R}| \le a_1 + a_2

    并且这个区间是连续的(通过改变两向量夹角可以连续变化)。

    多个向量的情况

    将前 k1k-1 个向量的合向量视为一个新的向量,其模长可以在某个区间 [Lk1,Sk1][L_{k-1}, S_{k-1}] 内连续变化。再与第 kk 个向量合成,根据三角不等式:

    Lk1akRkSk1+ak|L_{k-1} - a_k| \le |\vec{R}_k| \le S_{k-1} + a_k

    由于 Lk1L_{k-1}Sk1S_{k-1} 之间是连续的,合成后的模长也可以连续变化。不断迭代,最终可达的模长集合是一个连续区间

    关键结论

    设:

    • S=i=1naiS = \sum_{i=1}^n a_i
    • M=max(a1,a2,,an)M = \max(a_1, a_2, \dots, a_n)

    则经过 nn 步后,从起点出发能到达的所有点构成的集合是:

    • 圆心在起点,半径为 SS 的圆盘(如果 MSMM \le S - M
    • 半径为 [2MS,S][2M-S, S] 的圆环(如果 M>SMM > S - M

    即最小可达距离为:

    dmin=max(0, 2MS)d_{\min} = \max(0,\ 2M - S)

    最大可达距离为:

    dmax=Sd_{\max} = S

    并且区间 [dmin,dmax][d_{\min}, d_{\max}] 内的所有距离都是可达的。

    为什么没有奇偶性限制?

    在一维中,每次改变方向只能改变 2ai2a_i,导致奇偶性限制。但在二维中,可以通过连续旋转向量来连续改变合向量的模长,因此区间是连续的,没有离散限制。

    算法步骤

    1. 计算起点到终点的欧几里得距离:

      D=(pxqx)2+(pyqy)2D = \sqrt{(p_x - q_x)^2 + (p_y - q_y)^2}
    2. 计算步长总和:

      S=i=1naiS = \sum_{i=1}^n a_i
    3. 计算最大步长:

      M=maxi=1naiM = \max_{i=1}^n a_i
    4. 计算最小可达距离:

      $$d_{\min} = \begin{cases} 0, & \text{if } M \le S - M \\ 2M - S, & \text{if } M > S - M \end{cases}$$
    5. 判断是否可达:

      dminεDS+εd_{\min} - \varepsilon \le D \le S + \varepsilon

      其中 ε\varepsilon 是一个很小的正数(如 10910^{-9}),用于处理浮点精度误差。

    正确性证明

    充分性

    DD 在区间 [dmin,S][d_{\min}, S] 内,我们可以通过构造法证明可达:

    1. MSMM \le S - M 时,可以通过调整使前 n1n-1 步的合向量与第 nn 步反向,从而得到任意小于 SS 的模长。
    2. M>SMM > S - M 时,最大步长无法被完全抵消,最小模长就是 2MS2M - S,且通过调整夹角可以得到该区间内的任意值。

    必要性

    由三角不等式:

    • 总位移长度不超过各步长度之和:Rai=S|\vec{R}| \le \sum a_i = S
    • 总位移长度不小于 max(0,2MS)\max(0, 2M - S)(这是由三角形不等式多次应用得到的下界)

    因此,若 DD 不在 [dmin,S][d_{\min}, S] 内,则一定不可达。

    复杂度分析

    • 时间复杂度:O(n)O(n) 每个测试用例
    • 空间复杂度:O(1)O(1) 额外空间
    • nn 不超过 2×1052 \times 10^5,完全可行

    示例验证

    示例1

    n=2, a=[3,3], S=[1,1], T=[5,1]n=2,\ a=[3,3],\ S=[1,1],\ T=[5,1]

    • S=3+3=6S = 3+3 = 6
    • M=3M = 3
    • MSM=3M \le S-M = 3,故 dmin=0d_{\min}=0
    • D=(15)2+(11)2=4D = \sqrt{(1-5)^2 + (1-1)^2} = 4
    • 0460 \le 4 \le 6 ✅ 输出 Yes

    示例3

    n=2, a=[4,5], S=[100,100], T=[100,100]n=2,\ a=[4,5],\ S=[100,100],\ T=[100,100]

    • S=4+5=9S = 4+5 = 9
    • M=5M = 5
    • M>SM=4M > S-M = 4,故 dmin=2×59=1d_{\min} = 2 \times 5 - 9 = 1
    • D=0D = 0
    • 0<10 < 1 ❌ 输出 No

    注意事项

    1. 整数运算优先:计算 DD 时使用 sqrt,但比较时注意精度
    2. 数据类型:使用 long long 存储坐标差平方和,避免溢出
    3. 浮点精度:使用 ε=109\varepsilon = 10^{-9} 容忍计算误差
    4. 特殊情况:当 S=0S=0 时(n=0n=0,但题目保证 n1n\ge 1ai1a_i\ge 1,所以 S1S\ge 1
    • 1

    信息

    ID
    7123
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    1
    已通过
    1
    上传者