思路分析
我们的目标是最大化 ∑bi。由于 bi 的定义依赖于前缀 MEX,并且 bi 序列是非递减的(b1≤b2≤...≤bn),我们希望让 bi 的值尽可能早地、尽可能大地增长。
bi=MEX({a1,...,ai})。为了让 bi 的值变大,我们需要让前缀 {a1,...,ai} 尽可能地包含从 0 开始的连续整数。
- 为了最大化 b1=MEX({a1}),我们应该选择 a1=0(如果数组 a 中有 0 的话)。这样 b1=1。如果选择其他数, b1=0。
- 为了最大化 b2=MEX({a1,a2}),在 a1=0 的基础上,我们应该选择 a2=1(如果数组 a 中有 1 的话)。这样 {a1,a2}={0,1},使得 b2=2。
- 以此类推,为了让 bi 达到最大可能值 i,我们需要让前缀 {a1,...,ai} 恰好是 {0,1,...,i−1}。
题目内容
小美有一个长度为 n 的数组 a 。你可以将 a 任意重排。定义一个长度为 n 的数组 b,其中 bi=MEX(a1,a2,...,ai)。你需要最大化数组 b 中的元素之和。
你需要输出最大的元素和,以及一个可能的 a 的重排方案。
【名词解释】
MEX:整数数组的 MEX 定义为没有出现在数组中的最小非负整数。例如 MEX{1,2,3}=0、MEX{0,2,5}=1 。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写