Weighted Mean

· · 题解

数据人题解。

考虑到 a_i 的顺序并不影响答案的相对位置,因此对 a_i 从小到大排序。

从题目的第二个条件入手:

设这个加权平均数为 \lambda,那么有:

\begin{aligned} &\ \frac{\sum\limits_{i=1}^n (a_i \cdot b_i)}{ \sum\limits_{i=1}^n b_i}=\lambda \\ &\ \sum\limits_{i=1}^n (a_i \cdot b_i)=\lambda \sum\limits_{i=1}^n b_i \\ &\ \sum\limits_{i=1}^n (a_i \cdot b_i)=\sum\limits_{i=1}^n (\lambda b_i) \\ &\ \sum\limits_{i=1}^n (a_i \cdot b_i)-\sum\limits_{i=1}^n (\lambda b_i)=0 \\ &\ \sum\limits_{i=1}^n [b_i (a_i - \lambda)]=0 \end{aligned}

因此当 \lambda 确定,整个序列 c_i=a_i - \lambda 就确定,相应的 b_i 也就有比较简单的构造方案了,问题转化成找到一个合适的 \lambda。显然,当 \lambdaa_i 中位数越近,序列 b_i 越好构造。

考虑直接取中位数,那么我们需要根据 n 的奇偶性分类讨论:

n 是奇数

那么直接取 \lambda = a_{\lceil \frac{n}{2} \rceil},然后得到序列 c_i。显然,c_i 是单调递增的,且前 \lfloor \dfrac{n}{2} \rfloor 个元素都是负数,后 \lfloor \dfrac{n}{2} \rfloor 个元素都是正数。所以我们可以在 i \not= \dfrac{n}{2} 时直接取 b_i={| c_{n-i+1} |};在 i = \dfrac{n}{2} 时,直接取 b_i=m

证明:第二个条件已由刚才的构造得到满足。

对于第一个条件“序列 b 中的每个元素均为不大于 m 的正整数”,容易发现 | a_n-\lambda | < m| a_1-\lambda | < m,那么第一个条件也就能进而成立。

对于第三个条件“不存在有序三元整数组 (i,j,k),满足 1\le i<j<k\le nb_i=b_j=b_k”,我们发现由于 a_i 是互不相同的,因此 c_i 中绝对值相等的数也最多只有 2 个,不会达到 3 个,此外,a_n - \lambda <m,所以 c_i 中没有绝对值为 m 的元素。故第三个条件同样满足。

举一个构造例子。当 a_i=\{1,3,4,6,7\}m=7 来说,\lambda=a_3=4,得到 c_i=\{-3,-1,0,2,3\},对应有:b_1=|c_{5-1+1}|=|c_5|=3,其余元素同理,且 b_3=m=7,于是 b_i=\{3,2,7,1,3\}

n 是偶数

这时候需要进行简单转化。容易发现当序列 a_i 中间两个数不连续时直接取 \lambda 满足 a_{\frac{n}{2}}<\lambda<a_{\frac{n}{2}+1},然后类比 n 是奇数的方法来构造即可,不同点是不需要确定 b_\frac{n}{2} 的值。

如果中间两个元素连续,考虑取 \lambda 是中间两个元素中的一个,接下来使用如下的构造方法。

构造方法

这里取 \lambda=a_{\frac{n}{2}},那么得到的序列 c_i 中负数元素数量比正数元素数量少 1 个。考虑合并两个正数元素。容易发现此时 c_{\frac{n}{2}+1}=1,因此将 c_{\frac{n}{2}+1}c_n 合并,具体方式是:c_n \leftarrow c_n+1,然后与 n 是奇数的相似方法(有不同点)构造,再 b_{\frac{n}{2}+1} \leftarrow b_n 就完成了。

显然,在这种情况下 n=2 时是无解的,证明可以从另一个角度——分离常数法来解释。

不同点:由于第三个条件“不存在有序三元整数组 (i,j,k),满足 1\le i<j<k\le nb_i=b_j=b_k”,我们为合并后的 c_n 配对时,需要在 [1,n) 中寻找一个合适的 c_i 满足 c_i \not=c_n。所以有可能出现找不到这样的 c_i 的情况,那么取 \lambda=a_{\frac{n}{2}} 时就不可行了,换用 \lambda=a_{\frac{n}{2}+1},然后类比该构造方法。可以证明两个 \lambda 中至少有一个是可行的。

关于两个 \lambda 至少一者可行的证明

这里给出两个 \lambda 取值时得到的 c_i 序列:

\lambda 取值/下标 1 2 \cdots \dfrac{n}{2} \dfrac{n}{2}+1 \cdots n-1 n
a_{\frac{n}{2}} x_1 x_2 \cdots 0 1 \cdots x_{n-1} x_n
a_{\frac{n}{2}+1} x_1-1 x_2-1 \cdots -1 0 \cdots x_{n-1}-1 x_n-1

注:x_i 互不相同。

根据 c_i 的单调递增性,两个 \lambda 都不合法的必要条件是:

\begin{cases} x_1+1+x_n=0 \\ x_1-1-1+x_n-1=0 \end{cases}

而这个方程组没有解。所以两个 \lambda 中至少有一者合法。

构造时间复杂度

单组测试数据的时间复杂度是 O(n \log n),瓶颈在排序。