华为 · 计算几何 · 算法编程题
华为 计算几何 n ≤ 100 时限 1 秒 / 256 MB

题目描述

小红是一位热衷于探索宇宙奥秘的星际旅行者。最近,她在银河系的边缘发现了一片古老的星云,这里漂浮着许多蕴含神秘能量的“星屑”。
小红通过她的飞船雷达扫描了这片区域,将每一颗星屑的位置都映射到了一个二维平面坐标系中。根据古老的传说,当两颗星屑的距离越近,它们之间产生的“共鸣波动”就越强烈。为了寻找能量最纯净的共鸣源,小红需要找出这片区域中距离最近的两颗星屑。
为了避免处理浮点数带来的精度误差,飞船的主控电脑(也就是你)被要求计算这两颗星屑之间欧几里得距离的平方。
形式化地讲,给定平面上 n 个点的坐标,你需要找到两个点 (x_i, y_i) 和 (x_j, y_j) (其中 i ≠ j ),使得它们的距离平方 D = (x_i - x_j)^2 + (y_i - y_j)^2 最小,并输出这个最小值。

输入输出

输入描述
第一行包含一个整数 n ,表示星屑的数量。
接下来的 n 行,每行包含两个整数 x 和 y ,表示一颗星屑在平面上的坐标。
2 ≤ n ≤ 100,000
-100,000 ≤ x, y ≤ 100,000
输出描述
输出一个整数,表示所有星屑对中,最小的距离平方值。

样例共 1 组

样例 1 · 在样例中,最近的一对星屑坐标分别为 (3, 4) 和 (3, 5) 。 它们之间的距离平方计算如下: (3 - 3)^2 + (5 - 4)^2 = 0^2 + 1^2 = 1 没有其他点对的距离平方小于 1。
输入
5
0 0
0 5
3 4
3 5
3 6
输出
1

算法解析依据一般

考点:计算几何

数据规模 n ≤ 100 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 100
  • 元素值域:x ≤ 100,y ≤ 100(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:计算几何

把几何关系转成坐标运算,用整数运算避免浮点误差。

思路框架(计算几何 通法 · 非本题专属)

  1. 把点、向量、线段用坐标表示。
  2. 几何判定(平行、垂直、共线、相交)尽量用叉积/点积的整数形式:叉积为 0 即共线。
  3. 距离用平方比较,避免开方带来的浮点误差。
  4. 面积用叉积(鞋带公式)计算。

实现要点:叉积 cross = x1*y2 - x2*y1;用它判断顺时针/逆时针和共线。

复杂度:时间 O(n) ~ O(n²) | 空间 O(n)

该范式的通法易错点

  • 用浮点相等判断几何关系(应用整数叉积)。
  • 没考虑三点共线、重合等退化情况。

对照本题

  • 数据规模 n ≤ 100,允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 元素值域最大到 100 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 5 / 0 0 / 0 5 / 3 4 / 3 5 / 3 6 → 输出 1

在样例中,最近的一对星屑坐标分别为 (3, 4) 和 (3, 5) 。

它们之间的距离平方计算如下:

(3 - 3)^2 + (5 - 4)^2 = 0^2 + 1^2 = 1

没有其他点对的距离平方小于 1。

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2026年春招-华为-01月07号开发岗。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解