1 条题解
-
0
J. 构造三角形 详细题解
我们将这三个组依次记为 。
不妨设 ,且 。 记所有数的总和为 。 我们只需要保证每个组的和都小于 。
下面是合法分组存在的两个显然必要条件:
- 元素最多的组不会过大: 最小的 个数之和满足
- 最大元素不会过大:$$x_n + (x_1 + x_2 + \dots + x_{n_a-1}) < \dfrac{S}{2} $$
而结论是:这两个条件其实也是充分的! 我们可以证明一个更强的命题。
引理
假设我们已经放置了一部分数,这些数都大于等于剩下的所有数。 设当前组 的和为 ,还剩 个空位需要填充; 一共还剩 个数,满足 。
那么,剩余数字存在合法分配方式的充分必要条件是:
-
任何组都不会过大:对任意组 ,
-
最大元素不会过大: 存在某个还有空位的组 (即 ),使得
$$S_g + x_{n'} + (x_1 + x_2 + \dots + x_{n'_g-1}) < \dfrac{S}{2} $$
证明
必要性显然。下面证明充分性。
暂时不妨忽略 的顺序。 我们可以把当前最大的元素 放入组 ,于是有:
$$S_a + x_{n'} + (x_1 + x_2 + \dots + x_{n'_a-1}) < \dfrac{S}{2} $$剩下的数可以任意放进另外两组。 如果这两组的和最终都 ,则已经合法。
否则,不妨设组 的和 。
我们开始在 和 之间逐个交换可用元素。 如果某一时刻 的和同时 ,则合法。
注意:不可能出现“前一刻 ,下一刻 ”的情况。 因为当前 的和至多为
交换后它最多减少 、至少增加 ,因此仍然满足
于是唯一可能是 的和始终 。
同理,如果在 与 之间交换, 依然会 。 如果 已经没有空位(),就在 之间交换; 同样不可能一次交换就让 。
因此思路是: 我们不断交换,让最小的 个数最终落在 中。 但这与已知条件
矛盾。从而充分性得证。
构造方法
这个引理也直接给出了构造方案:
- 将元素从大到小依次加入各组;
- 每次选择一个组放入当前元素,使得放入后仍满足引理条件;
- 在排序并预处理前缀和后,每次检查可以做到 。
总时间复杂度为 。
- 1
信息
- ID
- 6595
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者