华为 · 排序 · 算法编程题
华为 排序 n ≤ 1e4 时限 1 秒 / 256 MB

题目描述

在一个稀疏 MOE 模型中,有 n 个专家顺序编号为 0…n-1,这些专家被平均分布到 m 张 NPU 卡上,每张卡上一组,且同组专家编号连续。为降低跨卡通信,现将路由目标限制在最多 p 张 NPU 上:
1) 先对每组求组内概率最大值及其专家编号,作为该组的代表值;
2) 把所有组按“代表概率”从高到低排序,若概率相同则组号小的在前,取前 p 个组;
3) 仅在上述 p 个组包含的所有专家里,按“概率降序、编号升序”挑选前 k 位的专家编号作为最终路由目标。
约束与异常
- 若 n 不能被 m 整除,则无法平均分组,输出 error。
- 若 p>m,输出 error。
- 设每组大小 g=n/m,若可选专家总数 p·g<k,无法选够 k 人,输出 error。

输入输出

输入描述
第一行:四个整数 n m p k(1≤n,m,p,k≤10000)
第二行:n 个浮点数,依次为专家 0…n-1 的概率,均在 (0,1) 内
输出描述
若发生异常,输出 error
否则输出 k 个专家编号,升序,空格分隔(行尾无空格)

样例共 2 组

样例 1 · 分组:g=6/3=2。组0=[0,1]→代表(0.3,idx0),组1=[2,3]→代表(0.6,idx3),组2=[4,5]→代表(0.4,idx4)。 选组:按代表概率降序取前 p=2 个,得到组1与组2。 选专家:在{2,3,4,5}中按概率降序取前 k=2,依次为 idx3(0.6)、idx4(0.4);最后升序输出 3 4。
输入
6 3 2 2
0.3 0.1 0.05 0.6 0.4 0.2
输出
3 4
样例 2 · 因为 n=6、m=4,n 必须能被 m 整除才能把专家平均分到每张 NPU 上(组大小 g=n/m 为整数)。这里 6%4≠0,g=1.5 不是整数,无法等分成 4 组,所以按规则直接输出 error。
输入
6 4 2 2
0.1 0.2 0.3 0.4 0.5 0.6
输出
error

算法解析依据一般

考点:排序

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

题目画像

  • 数据规模:n ≤ 1e4,m ≤ 1e4,k ≤ 1e4
  • 元素值域:p ≤ 1e4(注意整数类型选择,避免溢出)
  • 复杂度门槛:只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:排序

先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。

思路框架(排序 通法 · 非本题专属)

  1. 排序后很多性质变简单:相邻关系、前缀性质、二分可行。
  2. 若题目禁止使用排序库函数,则手写快排/归并(归并还能顺带求逆序对)。
  3. 排序常与其他范式组合,比如「排序 + 贪心」「排序 + 二分」「排序 + 双指针」。

实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。

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

该范式的通法易错点

  • 自定义比较函数不满足严格弱序会导致运行时崩溃。
  • 排序后丢失原始下标,题目需要下标时记得用 pair 一起排。

对照本题

  • 数据规模 n ≤ 1e4,只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 元素值域最大到 1e4 —— 求和 / 相乘时记得开 64 位整数。
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。

样例解读

样例 1:输入 6 3 2 2 / 0.3 0.1 0.05 0.6 0.4 0.2 → 输出 3 4

分组:g=6/3=2。组0=[0,1]→代表(0.3,idx0),组1=[2,3]→代表(0.6,idx3),组2=[4,5]→代表(0.4,idx4)。

选组:按代表概率降序取前 p=2 个,得到组1与组2。

选专家:在{2,3,4,5}中按概率降序取前 k=2,依次为 idx3(0.6)、idx4(0.4);最后升序输出 3 4。

样例 2:输入 6 4 2 2 / 0.1 0.2 0.3 0.4 0.5 0.6 → 输出 error

因为 n=6、m=4,n 必须能被 m 整除才能把专家平均分到每张 NPU 上(组大小 g=n/m 为整数)。这里 6%4≠0,g=1.5 不是整数,无法等分成 4 组,所以按规则直接输出 error。

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

本题来源:2025年秋招-华为-9月3号AI岗。

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