#CF2077D. 最大多边形
最大多边形
D. 最大多边形
每个测试的时间限制:3 秒
内存限制:256 MB
给定一个长度为 的数组 ,请找出 的字典序最大的子序列 ,使得 能作为一个多边形的边长。
回忆: 能作为多边形的边长当且仅当 且
$$2 \cdot \max(s_1, s_2, \dots, s_{|s|}) < s_1 + s_2 + \dots + s_{|s|}. $$如果不存在这样的子序列 ,则输出 。
定义
- 序列 的字典序小于序列 ,当且仅当以下之一成立:
- 是 的前缀,但 ;
- 在 和 第一个不同的位置上, 的元素小于 的对应元素。
- 序列 是序列 的子序列,如果 可以通过删除 中的若干(可能为零或全部)元素得到。
输入
每个测试包含多个测试用例。
第一行包含测试用例的数量 ()。
每个测试用例的格式如下:
- 第一行包含一个整数 ()——数组 的长度。
- 第二行包含 个整数 ()——数组 。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,按以下格式输出答案:
如果答案存在:
- 第一行输出一个整数 ()——子序列 的长度。
- 第二行输出 个整数 (, 是 的子序列)——子序列 。注意输出的是值,而不是下标。
否则,输出一行整数 。
示例
输入:
5
3
3 1 2
4
1 4 2 3
6
1 6 4 5 3 2
6
43 12 99 53 22 4
7
9 764 54 73 22 23 1
输出:
-1
3
4 2 3
4
6 5 3 2
5
43 99 53 22 4
4
54 73 23 1
示例解释
- 第一个测试用例:不存在可以作为多边形边长的子序列。
- 第二个测试用例:有两个可以作为多边形边长的子序列: 和 。后者是字典序更大的子序列。