粉兔杯初赛

[Luogu T365450] 粉兔杯初赛

\(n\) 种兔子,每种兔子有 \(a_i\) 只。给兔子两两配对(可能有一只兔子轮空),最大化两只兔子种类不同的兔子对数量。\(n \le 10^6, a_i \le 10^9\)

样例:

3
4 3 3

答案为 5,可以 1-2, 1-2, 1-3, 1-3, 2-3 这样配成五对。

提示:"每次找出最大的一堆和次大的一堆,然后把次大的直接和最大的全部配对。"这个策略是错解。样例即为反例。

解法

\(s = \sum\limits_{i=1}^n a_i\)\(m = \max\limits_{i=1}^n a_i\)。结论:答案为 \(\min\left(\left\lfloor\dfrac s 2\right\rfloor, s-m \right)\)

显然 \(m > \left\lfloor\dfrac s 2\right\rfloor\) 时,答案为 \(s - m\)

考虑 \(m \le \left\lfloor\dfrac s 2\right\rfloor\):显然答案上界就是 \(\left\lfloor\dfrac s 2\right\rfloor\)。接下来证明这个上界必然能取到。

配对策略:每次找出最大的一堆和次大的一堆,分别取出一只配对,其余放回。(P2902 [USACO08MAR] Pearl Pairing G

直接数学归纳法就可证出结论:

单次操作可以保证"最大值不超过所有数和的一半"这个性质。归纳下去,直到只剩 \(2\) 种兔子,再直到较少的兔子仅剩 \(1\) 只。

此时多的那种兔子的数量只可能是 \(1\)\(2\),而这两种都满足结论。

posted @ 2024-04-05 12:35  August_Light  阅读(31)  评论(0)    收藏  举报