交集分类:中心距离¶
出题人配套讲解中的中心距离判定。Codex(GPT-6):64 位 C++17 实现,并补充正长度判定以支持退化交集分类。
程序:alternative-center.cpp。与顶边方法并列,支持完整数据。
一维结论¶
考虑两个闭区间 \([l_A,r_A]\) 、\([l_B,r_B]\) ,定义边长 \(w_A=r_A-l_A\) 、\(w_B=r_B-l_B\) ,以及两倍中心距离
\[
c=|l_A+r_A-l_B-r_B|
\]
区间相交当且仅当 \(c\le w_A+w_B\) . 证明:当两区间中心分别为 \(s_A,s_B\) 时,区间互相够得着等价于 \(|s_A-s_B|\le(w_A+w_B)/2\) ;乘以二即得上式。也可以展开绝对值两侧的不等式,分别得到 \(l_A\le r_B\) 和 \(l_B\le r_A\) .
非空交集具有正长度,当且仅当 \(w_A>0\) 、\(w_B>0\) 且 \(c<w_A+w_B\) . 两区间均有长度时,等号只让端点接触,严格小于产生正长度重叠;若任一区间是点,交集至多是点,必须额外排除。例如 \([0,4]\) 与 \([2,2]\) 的中心重合,仍不能形成正长度交集。
二维算法与复杂度¶
对横纵坐标分别应用一维结论。任一方向为空则整体为空,否则相交。分类时将两个方向的正长度指示值相加,按 \(0,1,2\) 分别输出 Point 、Edge 、Area .
中心距离和边长和都可能达到 \(4\cdot10^9\) ,超过 32 位有符号整数,应使用 64 位类型。每组 \(O(1)\) 时间、\(O(1)\) 额外空间,总时间 \(O(T+1)\) . 与投影公式相比,它通过中心和边长表达相同的几何事实;退化判定略多,但不需要浮点中心坐标。