华为 · 高精度 · 算法编程题
华为 高精度 n ≤ 1e6 时限 3 秒 / 512 MB

题目描述

在遥远的未来,人类已步入深空探索时代。
一家名为“星尘航路”的先锋公司绘制了一份包含 n 个未知星系的宏伟星图。
每个星系 i 都被赋予了一个独特的空间量子签名 a_i ,这是一个用于描述其多维度物理特性的巨大整数。
“星尘航路”公司掌握了一项革命性技术:在两个星系之间开启稳定的虫洞。
然而,虫洞的建立条件极为苛刻,只有当两个星系 i 和 j 的空间量子签名发生“谐波共振”时才能成功。
您是“星尘航路”公司的一名网络架构师,负责规划星际航线。您需要分析给定的 n 个星系及其签名,以确定最高效的航行网络。
星系网络 : 整个星图可以被看作一个巨大的网络(一个无向图),其中每个星系是一个节点。
虫洞(边): 只有当星系 i 和星系 j ( i ≠ j ) 的签名 a_i 和 a_j 满足谐波共振条件时,它们之间才能建立一条虫洞(一条边)。共振条件被定义为两个签名的 按位与 (Bitwise AND) 运算结果不为零:
a_i \& a_j ≠ 0
航行回路 : 您的任务是找出这个星际网络中最短的航行回路(即图论中的“环”)。一个有效的回路必须至少包含 3 个星系。回路的长度定义为它所包含的虫洞数量。
任务目标 : 计算出最短航行回路的长度。如果网络中不存在任何回路,则报告该情况。

输入输出

输入描述
第一行是一个整数 n ,代表已发现的星系总数 ( 1 ≤ n ≤ 10^6 )。
第二行是 n 个用空格分隔的整数 a_1, a_2, ..., a_n ,代表每个星系的空间量子签名 ( 0 ≤ a_i ≤ 10^18 )。注意:签名值可能为 0 或出现重复。
输出描述
输出一个整数,表示最短航行回路的长度。
如果星际网络中不存在任何回路,则输出 -1 。

样例共 2 组

样例 1
输入
10
448 0 112 0 0 0 28 260 3 0
输出
4
样例 2
输入
4
1 2 4 8
输出
-1

算法解析依据一般

考点:高精度

数据规模 n ≤ 1e6 | 限制 3 秒 / 512MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 1e6
  • 元素值域:a_i ≤ 1e18(注意整数类型选择,避免溢出)
  • 复杂度门槛:只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 源站时限:3 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:高精度

用数组/字符串模拟竖式运算,突破内置整数范围限制。

思路框架(高精度 通法 · 非本题专属)

  1. 用数组从低位到高位存每一位数字。
  2. 按竖式规则做加/减/乘,处理进位与借位。
  3. 输出时去掉前导零,按高位到低位输出。

实现要点:Python 原生支持大整数,本题用 Python 可直接算;C++ 需手写或使用 __int128 兜底。

复杂度:时间 O(位数 × 位数) | 空间 O(位数)

该范式的通法易错点

  • 进位/借位漏处理。
  • 结果全是 0 时输出了空串。

对照本题

  • 数据规模 n ≤ 1e6,只允许 O(n) 或 O(n log n),且常数要小(注意读入效率)。
  • 元素值域最大到 1e18 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例

样例 1

  • 输入:10 / 448 0 112 0 0 0 28 260 3 0
  • 输出:4

样例 2

  • 输入:4 / 1 2 4 8
  • 输出:-1

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

本题来源:2025年秋招-华为-10月29号开发岗。

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