CF2077D Maximum Polygon
题目描述
给定一个长度为 $n$ 的数组 $a$,确定字典序最大的 $^{\text{∗}}$ 子序列 $^{\text{†}}$ $s$,使得 $s$ 可以作为多边形的边长。
当且仅当 $|s| \geq 3$ 且满足以下条件时,$s$ 可以作为多边形的边长:
$$ 2 \cdot \max(s_1, s_2, \ldots, s_{|s|}) < s_1 + s_2 + \ldots + s_{|s|}. $$
如果不存在这样的子序列 $s$,输出 $-1$。
$^{\text{∗}}$ 序列 $x$ 的字典序小于序列 $y$,当且仅当以下条件之一成立:
- $x$ 是 $y$ 的前缀,但 $x \neq y$;
- 在 $x$ 和 $y$ 第一个不同的位置,$x$ 的元素小于 $y$ 中对应的元素。
$^{\text{†}}$ 序列 $x$ 是序列 $y$ 的子序列,当且仅当 $x$ 可以通过从 $y$ 中删除若干(可能为零或全部)元素得到。
输入格式
每个测试包含多个测试用例。第一行输入测试用例的数量 $t$($1 \le t \le 10^4$)。接下来描述每个测试用例。
每个测试用例的第一行输入一个整数 $n$($3 \leq n \leq 2 \cdot 10^5$)——数组 $a$ 的长度。
第二行输入 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \leq a_i \leq 10^9$)——数组 $a$。
保证所有测试用例的 $n$ 的总和不超过 $2 \cdot 10^5$。
输出格式
对于每个测试用例,按以下格式输出答案:
如果存在答案,按以下格式输出:
第一行输出整数 $k$($1 \leq k \leq n$)——子序列 $s$ 的长度。
第二行输出 $k$ 个整数 $s_1, s_2, \ldots, s_k$($1 \leq s_i \leq 10^9$,$s$ 是 $a$ 的子序列)——子序列 $s$。注意输出的是元素值,而非下标。
否则,输出一行整数 $-1$。
说明/提示
在第一个测试用例中,不存在可以作为多边形边长的子序列。
在第二个测试用例中,有两个可以作为多边形边长的子序列:$1, 4, 2, 3$ 和 $4, 2, 3$。后者是字典序更大的子序列。
翻译由 DeepSeek R1 完成