在一个稀疏 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 个专家编号,升序,空格分隔(行尾无空格)
6 3 2 2 0.3 0.1 0.05 0.6 0.4 0.2
3 4
6 4 2 2 0.1 0.2 0.3 0.4 0.5 0.6
error
考点:排序
数据规模 n ≤ 1e4 | 限制 1 秒 / 256MB | 标准输入输出
参考方向:排序
先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。
思路框架(排序 通法 · 非本题专属)
实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。
复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)
该范式的通法易错点
对照本题
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 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岗。