CF1859B Olya and Game with Arrays 题解

· · 题解

题意理解

## 思路分析 不难发现: 1. 全部 $\sum\limits_{i=1}^n m_i$ 个数的最小值 $x$ 是一定会被作为某个序列的最小值加入答案的; 2. 对于每个序列的操作肯定是移动最小值。 因此我们可以将每个序列的最小值移动到序列 $i$ 中。那移动到哪个序列呢? 考虑到最终的答案为 $x$ 加上除 $i$ 之外其他序列 **移走最小值之后的最小值**,即 **次小值**。首先我们发现 $x$ 是可以求的定值,其次为了使除了 $i$ 之外其他序列的次小值之和尽可能大,我们不妨让序列 $i$ 为 **次小值最小的那个序列**。然后就非常简单了。 ## 代码实现 对于每个序列维护两个数组分别记录最小值和次小值,维护也非常简单,遍历一遍每个数然后判断一下即可。 设遍历到第 $i$ 个序列的数 $v$,且数组 $f_1$ 表示最小值,$f_2$ 表示次小值。则代码如下: ```cpp if(v<=f1[i]) f2[i]=f1[i],f1[i]=v; else if(v<f2[i]) f2[i]=v; ``` [AC code](https://codeforces.com/contest/1859/submission/218527219) 无法理解代码的可以私信问我。