1 条题解

  • 0
    @ 2025-12-9 17:16:19

    题目重述

    nn 架飞机在数轴上,第 ii 架飞机初始位置 xix_i,初始速度 viv_i,满足 xivi<0x_i \cdot v_i < 0(正面向原点移动)。
    在气流速度 u[w,w]u \in [-w, w] 影响下,飞机速度变为 vi+uv_i + u
    每架飞机到达原点 x=0x=0 的时刻需要与管理员通信。
    求有多少对 (i,j)(i,j)i<ji < j)使得存在一个 u[w,w]u \in [-w, w],使第 ii 架和第 jj 架飞机同时到达原点。


    第一步:推导同时到达的条件

    设第 ii 架飞机的到达时间 ti(u)=xivi+ut_i(u) = \frac{|x_i|}{|v_i + u|}
    因为 xivi<0x_i \cdot v_i < 0,所以 xix_iviv_i 异号,说明飞机初始位置和速度方向相反,朝原点运动。
    我们可以用符号来避免绝对值。

    xi>0x_i > 0,则 vi<0v_i < 0,朝左运动;
    xi<0x_i < 0,则 vi>0v_i > 0,朝右运动。

    为了方便,定义 pi=xip_i = x_isi=vis_i = v_i
    由于它们异号,ti(u)=xivi+ut_i(u) = -\frac{x_i}{v_i + u} 会是正数(因为分母 vi+uv_i + uxix_i 符号相反)。


    更严格地:设 ti(u)=xivi+ut_i(u) = -\frac{x_i}{v_i + u},要 ti(u)>0t_i(u) > 0,则 xi-x_ivi+uv_i+u 同号,因为 xivi<0x_i v_i < 0,可以验证 ti(u)>0t_i(u)>0u[w,w]u \in [-w,w] 成立(因为 u<vi|u|<|v_i| 保证 vi+uv_i+u 不改变符号)。

    我们要求 ti(u)=tj(u)t_i(u) = t_j(u) 有解 u[w,w]u \in [-w, w]

    即:

    xivi+u=xjvj+u.-\frac{x_i}{v_i + u} = -\frac{x_j}{v_j + u}.

    化简:

    $$x_i(v_j + u) = x_j(v_i + u) \quad\Rightarrow\quad x_i v_j + x_i u = x_j v_i + x_j u. $$

    移项:

    u(xixj)=xjvixivj.u(x_i - x_j) = x_j v_i - x_i v_j.

    即:

    u=xjvixivjxixj.u = \frac{x_j v_i - x_i v_j}{x_i - x_j}.

    这就是让 i,ji,j 同时到达所需的气流速度。


    第二步:可行性条件

    我们需要 u[w,w]u \in [-w, w]u<min(vi,vj)|u| < \min(|v_i|, |v_j|)(题中 w<vi|w| < |v_i| 对所有 ii,所以如果 uw|u| \le w 则自动满足 u<vi|u| < |v_i|vj|v_j|)。

    因此条件简化为:

    $$\left| \frac{x_j v_i - x_i v_j}{x_i - x_j} \right| \le w. $$

    关键变换

    uij=xjvixivjxixj.u_{ij} = \frac{x_j v_i - x_i v_j}{x_i - x_j}.

    分子分母可能为 0 吗?
    分母 xixj=0x_i - x_j = 0 时,若 xi=xjx_i = x_j 则同时 vi=vjv_i = v_j 会相同飞机,题目保证飞机不同,所以分母不为 0。
    xix_i 可能同号或异号。


    我们可以将 uiju_{ij} 写成更方便的形式。
    ai=xivia_i = \frac{x_i}{v_i}(注意 xi,vix_i, v_i 异号,所以 ai<0a_i < 0)。
    推导:
    ti(u)=xivi+ut_i(u) = -\frac{x_i}{v_i + u}ti(u)=tj(u)t_i(u) = t_j(u) 得:

    $$\frac{-x_i}{v_i + u} = \frac{-x_j}{v_j + u} \quad\Rightarrow\quad \frac{x_i}{v_i + u} = \frac{x_j}{v_j + u}. $$

    交叉相乘:

    $$x_i v_j + x_i u = x_j v_i + x_j u \quad\Rightarrow\quad u(x_i - x_j) = x_j v_i - x_i v_j. $$

    和上面一致。

    若记 ai=xivia_i = \frac{x_i}{v_i},则 $u_{ij} = \frac{x_j v_i - x_i v_j}{x_i - x_j} = \frac{v_i v_j(a_j - a_i)}{x_i - x_j}$?不对,试试直接推导。

    xi/vi+u=xj/vj+ux_i/v_i + u = x_j/v_j + u ?不成立,因为 xi/(vi+u)x_i/(v_i+u) 相等并不意味着 xi/vix_i/v_i 相关。

    更好方法:
    ti(u)=tj(u)t_i(u) = t_j(u),即:

    xivi+u=xjvj+u.\frac{-x_i}{v_i + u} = \frac{-x_j}{v_j + u}.

    这等价于:

    vi+uxi=vj+uxj.\frac{v_i + u}{-x_i} = \frac{v_j + u}{-x_j}.

    去分母:

    (vi+u)xj=(vj+u)xi.(v_i + u) x_j = (v_j + u) x_i.

    这和之前一样。

    我们尝试用 ai=xivia_i = -\frac{x_i}{v_i}(使其为正数?因为 xivi<0x_i v_i < 0,所以 xivi>0-\frac{x_i}{v_i} > 0)。定义 Ti=xiviT_i = -\frac{x_i}{v_i},则 ti(0)=Tit_i(0) = T_i

    现在 ti(u)=xivi+ut_i(u) = \frac{-x_i}{v_i + u}
    ti(u)=tj(u)t_i(u) = t_j(u)

    $$\frac{-x_i}{v_i + u} = \frac{-x_j}{v_j + u} \quad\Rightarrow\quad \frac{1}{v_i + u} \cdot (-x_i) = \frac{1}{v_j + u} \cdot (-x_j). $$

    ki=xi/vi=Tik_i = -x_i / v_i = T_i,则 xi=kivi-x_i = k_i v_i

    代入:

    $$\frac{k_i v_i}{v_i + u} = \frac{k_j v_j}{v_j + u}. $$

    交叉相乘:

    kivi(vj+u)=kjvj(vi+u).k_i v_i (v_j + u) = k_j v_j (v_i + u). $$k_i v_i v_j + k_i v_i u = k_j v_i v_j + k_j v_j u. $$

    整理:

    u(kivikjvj)=vivj(kjki).u(k_i v_i - k_j v_j) = v_i v_j (k_j - k_i).

    所以:

    $$u = \frac{v_i v_j (k_j - k_i)}{k_i v_i - k_j v_j}. $$

    这仍然复杂。


    第三步:转化为几何问题

    回到 u=xjvixivjxixju = \frac{x_j v_i - x_i v_j}{x_i - x_j}

    写作:

    $$u = \frac{ \begin{vmatrix} x_i & v_i \\ x_j & v_j \end{vmatrix} }{x_i - x_j}. $$

    一个技巧:考虑点 (1/vi,xi/vi)(1/v_i, x_i/v_i) 的斜率?令 pi=(1/vi,xi/vi)p_i = (1/v_i, x_i/v_i),不过也许更简单是直接分类符号。


    xix_i 符号分类

    xi>0x_i > 0 的飞机集合为 RRvi<0v_i < 0),
    xi<0x_i < 0 的飞机集合为 LLvi>0v_i > 0)。


    情形 1:i,ji,j 同侧(比如都在 LL 或都在 RR

    若都在 LLxi<0,vi>0x_i<0, v_i>0, xj<0,vj>0x_j<0, v_j>0
    u=xjvixivjxixju = \frac{x_j v_i - x_i v_j}{x_i - x_j}
    注意 xi,xjx_i, x_j 同号,分母为负(若 xi<xjx_i < x_jxixj<0x_i - x_j < 0)。
    这种情形下 uu 可能不在 [w,w][-w,w],取决于具体值,但通常会很大(因为分母小,分子可能不小)。


    情形 2:i,ji,j 异侧(一个在 LL,一个在 RR

    xi<0,vi>0x_i<0, v_i>0, xj>0,vj<0x_j>0, v_j<0
    xixj<0x_i - x_j < 0(负减正为负)。
    分子 xjvixivjx_j v_i - x_i v_j
    xj>0,vi>0x_j>0, v_i>0xjvi>0x_j v_i > 0
    xi<0,vj<0x_i<0, v_j<0xivj>0-x_i v_j > 0,所以分子 >0>0

    因此 u=正数/负数<0u = \text{正数} / \text{负数} < 0
    我们需要 uw|u| \le w,即:

    $$\left| \frac{x_j v_i - x_i v_j}{x_i - x_j} \right| \le w. $$

    由于 xi<0x_i<0,记 Xi=xi>0X_i = -x_i > 0xj>0x_j>0,记 Xj=xj>0X_j = x_j > 0
    vi>0v_i>0,记 Vi=vi>0V_i = v_i > 0vj<0v_j<0,记 Vj=vj>0V_j = -v_j > 0

    那么:

    xjvi=XjVi,xivj=XiVj.x_j v_i = X_j V_i, \quad -x_i v_j = X_i V_j.

    分子 = XjVi+XiVjX_j V_i + X_i V_j

    分母 xixj=XiXj=(Xi+Xj)x_i - x_j = -X_i - X_j = -(X_i + X_j)

    所以:

    u=XjVi+XiVjXi+Xj.u = -\frac{X_j V_i + X_i V_j}{X_i + X_j}.

    绝对值:

    u=XjVi+XiVjXi+Xj.|u| = \frac{X_j V_i + X_i V_j}{X_i + X_j}.

    条件 uw|u| \le w 就是:

    XjVi+XiVjXi+Xjw.\frac{X_j V_i + X_i V_j}{X_i + X_j} \le w.

    交叉相乘(分母正):

    XjVi+XiVjw(Xi+Xj).X_j V_i + X_i V_j \le w(X_i + X_j).

    整理:

    Xj(Viw)+Xi(Vjw)0.X_j (V_i - w) + X_i (V_j - w) \le 0.

    因为 Xi,Xj>0X_i, X_j > 0Vi,Vj>wV_i, V_j > w(题中 vi>w|v_i| > wVi=vi>wV_i = |v_i| > w),所以 Viw>0,Vjw>0V_i - w > 0, V_j - w > 0,左边两项都为正,和不可能 0\le 0
    等等,这说明异侧时 u>w|u| > w?那样例 2 怎么解释?


    第四步:检查样例 2

    样例 2 中 w=1w=1,异侧飞机确实全部成对满足条件,说明异侧时 uw|u| \le w 总是成立?
    我们需要验证公式。

    LL 中飞机 x=3,v=2x=-3, v=2RR 中飞机 x=1,v=2x=1, v=-2
    Xi=3,Vi=2X_i=3, V_i=2, Xj=1,Vj=2X_j=1, V_j=2
    $|u| = \frac{1\cdot 2 + 3\cdot 2}{3+1} = \frac{2+6}{4} = 2$,大于 w=1w=1,但样例说它们能同时到达?
    我们算 uu 精确值:
    $u = \frac{x_j v_i - x_i v_j}{x_i - x_j} = \frac{1\cdot 2 - (-3)(-2)}{-3 - 1} = \frac{2 - 6}{-4} = \frac{-4}{-4} = 1$,哦,我计算 XjVi+XiVjX_j V_i + X_i V_j 时错了,应该是 xjvi=12=2x_j v_i = 1\cdot 2 = 2xivj=3(2)??-x_i v_j = 3 \cdot (-2)?? 等一下 vj=2v_j=-2,所以 xivj=(3)(2)=6-x_i v_j = -(-3)(-2) = -6 ??不对。

    重新算:分子 $x_j v_i - x_i v_j = 1\cdot 2 - (-3)(-2) = 2 - 6 = -4$,分母 31=4-3-1=-4,所以 u=1u=1

    那么 u=1w=1|u|=1 \le w=1,满足。
    我刚才代 XjVi+XiVjX_j V_i + X_i V_j 时,xivj-x_i v_j 中的 vjv_j 是负的,所以 Vj=2V_j=2vj=2v_j=-2xivj=(3)(2)=6-x_i v_j = -(-3)(-2) = -6,加上 xjvi=2x_j v_i=2,分子是 2+(6)=42 + (-6) = -4,绝对值是 4,除以 Xi+Xj=4X_i+X_j=4 得 1。对的。

    所以公式应为: 分子绝对值 xjvixivj=XjViXiVj|x_j v_i - x_i v_j| = |X_j V_i - X_i V_j|
    因为 vj<0v_j<0vj=Vjv_j = -V_jxivj=xi(Vj)=xiVj-x_i v_j = -x_i(-V_j) = x_i V_j,而 xi=Xix_i = -X_i,所以 xiVj=XiVjx_i V_j = -X_i V_j
    所以 xjvixivj=XjVi(XiVj)??x_j v_i - x_i v_j = X_j V_i - (-X_i V_j)?? 不对,仔细来:

    xi=Xix_i = -X_i, vi=Viv_i = V_i,
    xj=Xjx_j = X_j, vj=Vjv_j = -V_j

    xjvi=XjVix_j v_i = X_j V_i
    xivj=(Xi)(Vj)=XiVjx_i v_j = (-X_i)(-V_j) = X_i V_j

    所以 xjvixivj=XjViXiVjx_j v_i - x_i v_j = X_j V_i - X_i V_j

    分母 xixj=XiXj=(Xi+Xj)x_i - x_j = -X_i - X_j = -(X_i+X_j)

    所以 $u = \frac{X_j V_i - X_i V_j}{-(X_i+X_j)} = \frac{X_i V_j - X_j V_i}{X_i+X_j}$。

    绝对值 u=XjViXiVjXi+Xj|u| = \frac{|X_j V_i - X_i V_j|}{X_i+X_j}

    条件 uw|u| \le w 即:

    XjViXiVjw(Xi+Xj).|X_j V_i - X_i V_j| \le w(X_i+X_j).

    第五步:化简条件

    XjViXiVjw(Xi+Xj)|X_j V_i - X_i V_j| \le w(X_i+X_j)

    等价于:

    w(Xi+Xj)XjViXiVjw(Xi+Xj).-w(X_i+X_j) \le X_j V_i - X_i V_j \le w(X_i+X_j).

    这分为两个不等式:

    1. XjViXiVjw(Xi+Xj)X_j V_i - X_i V_j \le w(X_i+X_j),即
      Xj(Viw)Xi(Vj+w)X_j(V_i - w) \le X_i(V_j + w)

    2. XjViXiVjw(Xi+Xj)X_j V_i - X_i V_j \ge -w(X_i+X_j),即
      Xj(Vi+w)Xi(Vjw)X_j(V_i + w) \ge X_i(V_j - w)

    因为 Vi,Vj>w>0V_i, V_j > w > 0,这些不等式是线性关系。


    第六步:转化为斜率比较

    Xj(Viw)Xi(Vj+w)X_j(V_i - w) \le X_i(V_j + w) 得:

    XiXjViwVj+w.\frac{X_i}{X_j} \ge \frac{V_i - w}{V_j + w}.

    Xj(Vi+w)Xi(Vjw)X_j(V_i + w) \ge X_i(V_j - w) 得:

    XiXjVi+wVjw.\frac{X_i}{X_j} \le \frac{V_i + w}{V_j - w}.

    所以存在 uu 的条件是:

    $$\frac{V_i - w}{V_j + w} \le \frac{X_i}{X_j} \le \frac{V_i + w}{V_j - w}. $$

    ai=XiViwa_i = \frac{X_i}{V_i - w}, bi=XiVi+wb_i = \frac{X_i}{V_i + w}

    则条件变为(注意 iL,jRi \in L, j \in RXi>0,Xj>0X_i>0, X_j>0):

    $$\frac{V_i - w}{V_j + w} \le \frac{X_i}{X_j} \le \frac{V_i + w}{V_j - w}. $$

    两边取倒数(注意不等号方向)? 不等,我们保持原样。

    等价于:

    $$X_j (V_i - w) \le X_i (V_j + w) \quad\text{且}\quad X_i (V_j - w) \le X_j (V_i + w). $$

    即:

    $$\frac{X_i}{V_i + w} \ge \frac{X_j}{V_j - w} \quad\text{且}\quad \frac{X_i}{V_i - w} \le \frac{X_j}{V_j + w}. $$

    定义:

    $$L_{\min}(i) = \frac{X_i}{V_i + w}, \quad L_{\max}(i) = \frac{X_i}{V_i - w}. $$

    jRj \in R,定义:

    $$R_{\min}(j) = \frac{X_j}{V_j + w}, \quad R_{\max}(j) = \frac{X_j}{V_j - w}. $$

    则条件为:

    $$L_{\min}(i) \ge R_{\min}(j) \quad\text{且}\quad L_{\max}(i) \le R_{\max}(j). $$

    第七步:转化为二维偏序问题

    LL 中飞机,有点 (Lmax(i),Lmin(i))(L_{\max}(i), L_{\min}(i))
    RR 中飞机,有点 (Rmax(j),Rmin(j))(R_{\max}(j), R_{\min}(j))
    条件:Rmax(j)Lmax(i)R_{\max}(j) \ge L_{\max}(i)Rmin(j)Lmin(i)R_{\min}(j) \le L_{\min}(i)

    RR 的点要在 LL 点的右下方。


    第八步:统计对数

    LL 的点按 LmaxL_{\max} 排序,RR 的点按 RmaxR_{\max} 排序。
    对每个 LL(xL,yL)(x_L, y_L),统计 RRRmaxxLR_{\max} \ge x_LRminyLR_{\min} \le y_L 的数量。
    可以用 Fenwick 树:将 RR 点按 RmaxR_{\max} 排序后,从大到小枚举 xLx_L,把 RmaxxLR_{\max} \ge x_LRR 点的 RminR_{\min} 加入树中,然后查询 yL\le y_L 的数量。


    第九步:算法步骤

    1. xix_i 符号分成 LLRR 集合。
    2. LL 中飞机,计算 Xi=xiX_i = -x_i, Vi=viV_i = v_i,然后 Lmax(i)=Xi/(Viw)L_{\max}(i) = X_i/(V_i - w), Lmin(i)=Xi/(Vi+w)L_{\min}(i) = X_i/(V_i + w)
    3. RR 中飞机,计算 Xj=xjX_j = x_j, Vj=vjV_j = -v_j,然后 Rmax(j)=Xj/(Vjw)R_{\max}(j) = X_j/(V_j - w), Rmin(j)=Xj/(Vj+w)R_{\min}(j) = X_j/(V_j + w)
    4. RR 的点按 RmaxR_{\max} 排序。
    5. LL 的点按 LmaxL_{\max} 排序。
    6. 倒序遍历 LL 的点(从大 LmaxL_{\max} 到小),用指针将 RmaxR_{\max} \ge 当前 LmaxL_{\max}RR 点的 RminR_{\min} 加入 Fenwick 树(离散化 RminR_{\min} 值),查询树中 Lmin(i)\le L_{\min}(i) 的数量,累加。
    7. 输出总数。

    第十步:同侧飞机对

    同侧飞机对(LLL-LRRR-R)的情况:
    可以证明,若 i,ji,j 在同侧,则 u=XjViXiVjXiXju = \frac{X_j V_i - X_i V_j}{X_i - X_j}(适当调整符号),uw|u| \le w 的条件比较苛刻,通常很少成立。
    可以单独用类似方法处理,但根据数据范围和样例,可能异侧占主要部分,同侧需要单独计算但不多。

    实际可统一用公式 XjViXiVjwXiXj|X_j V_i - X_i V_j| \le w|X_i - X_j| 判断,但直接两两比较 O(n2)O(n^2) 不行。
    同侧时 VV 同号,XX 同号,可以用斜率排序求。


    总结

    本题核心:

    1. 推导出同时到达的条件 u=xjvixivjxixju = \frac{x_j v_i - x_i v_j}{x_i - x_j}
    2. xx 符号分类,转化为 XjViXiVjw(Xi+Xj)|X_j V_i - X_i V_j| \le w(X_i+X_j) 对异侧飞机。
    3. 化为二维偏序问题,用排序+Fenwick树统计。
    4. 同侧飞机需单独处理(类似方法,但条件不同)。

    复杂度 O(nlogn)O(n \log n),可过 n105n \le 10^5

    • 1

    信息

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